Android逆向分析思路:从AndroidManifest.xml找到程序…
静态分析android程序从AndroidManifest.xml找到程序的入口分析每个android程序都有一个主的activity,它是程序启动的第一个activity,然后每个activity都需要在 AndroidManifest.xml文件中声明,看下面得例子: 123456<activity android:theme="@style/DrugTheme.Launcher" android:name="cn.dxy.medicinehelper.activity.DrugLaunchActivity" android:exported="true" android:screenOrientation="portrait"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.in...
Android常用的命令:命令分类
命令分类把在adb shell中的执行的命令成为shell命令,在外面执行的叫非shell命令 非shell命令查看当前正在运行app的activity信息12adb shell dumpsys activity topadb shell dumpsys > infos.txt 查看包名应用详细的信息1adb shell dumpsys package(包名) 查看指定包app的数据组存储信息1adb shell dumpsys dbinfo 包名 转发设备端口1adb forward 协议:端口 ... 查看设备中可以被调试的应用进程号1adb jdwp 查看当前日志信息12adb logcat -v time > E://log.txt-v 显示日志格式 -v time 时间格式 adb logcat 命令格式:adb logcat [选项] [过滤项],其中 选项 和 过滤项 在 中括号 [] 中, 说明这是可选的; (1) 选项解析 – “-s”选项 : 设置输出日志的标签, 只显示该标签的日志; –”-f”选项 : 将日志输出到文件, 默认输...
JNI静态注册和动态注册:JNI是什么?
JNI是什么? JNI是Java Native Interface的缩写,中文名为JAVA本地调用。它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。Java是支持调用C/C++代码的,不过不能直接调用,因此需要一个中间层来进行转换、翻译,这就是JNI(Java Native Interface)的意思,JNI的作用就是粘合Java代码和C++代码。 JNIEnv类型JNIEnv类型实际上代表了java的环境,通过JNIEnv *指针就可以对java端的代码进行操作。 jclass类型为了能够在c/c++中使用java类,jni.h头文件中专门定义了jclass类型来表示java中的class类: jclass FindClass(const char* name) 通过类的名称获取jcalss,例如jclass str = env->FindClass (“java/lang/String”);获取java...
Android虚拟机:Dalvik
Dalvik和ARTDalvik 虽然android平台使用java语言开发,但是android程序却不是运行在java的虚拟机上。它是由google公司专门为android平台设计一个虚拟机,用于运行android程序 Android 运行环境主要指的Dalvik虚拟机技术,也就是安卓虚拟机DVM。Android中的所有Java程序都是运行在DVM上的,每个Android应用进程对应着一个独立的Dalvik虚拟机实例并在其解释下执行。DVM没有遵循Java虚拟机规范,不能直接执行Java的.class文件,而是执行.dex文件。它使用的是寄存器架构而不是JVM中常见的栈架构。其中.dex(Dalvik Executable)文件是通过.class文件转化而来,安卓使用Java语法编写应用程序,可以直接使用大部分的Java API等。 虽然DVM也是用Java编程语言,Dalvik虚拟机和一般JAVA虚拟机(Java VM)并不兼容,他们两个的区别是JVM标准执行的是.class的字节码(bytecode ),而是DVM执行的是其专有的(.dex)执行文件。在编译过程中,J...
Android逆向基础之apk文件:apk文件目录结构
apk文件认识APK文件其实是zip格式,但后缀名被修改为apk。我们修改ZIP后缀名方式可以看到内部的文件结构,或者用压缩工具直接解压 apk文件目录结构 AndroidManifest.xml 这里的AndroidManifest.xml就是源代码中的AndroidManifest.xml编译后所得到的文件。AndroidManifest.xml是安卓应用程序的全局配置文件,该文件保存了apk的包名,版本信息,sdk版本,Activity ,Service, Boardcast Receiver, Content Provider等应用组件的配置信息。还有程序所需要的权限也是在AndroidManifest.xml这个文件中声明的。 classes.dex 虽然Android开发的源语言是java,但是Android应用程序却不在标准的java虚拟机上运行。Google为Android平台专门设计了一套用于运行Android程序的虚拟机,这就是Dalvik虚拟机(Dalvik Virtual Machine)。而classes.dex就是运行在Dalvik虚拟机上的可...
MySQL数据库:用户相关操作
安装mysqlhttps://www.runoob.com/../images/mysql/mysql-install.html mysql的存储引擎查看引擎语句 show engines; 查看所有的引擎 SHOW VARIABLES LIKE 'default_storage_engine'; 查看当前默认引擎 12345678910111213141516171819202122232425262728293031323334353637383940存储引擎 -- 存储数据的方式一张表 数据 表的结构 索引(查询的时候使用的一个目录结构)Innodb存储引擎 mysql5.6之后的默认的存储引擎数据和索引存储在一起 2个文件 数据索引\表结构数据持久化支持事务 : 为了保证数据的完整性,将多个操作变成原子性操作 : 保持数据安全支持行级锁 : 修改的行少的时候使用 : 修改数据频繁的操作支持表级锁 : 批量修改多行的时候使用 ...
MySQL日常命令笔记:查看日志和配置文件位置
mysql的sql语句查看日志和配置文件位置配置文件root@8cebc228cfea:/# mysql –verbose –help|grep -A 1 ‘Default options’Default options are read from the following files in the given order:/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 日志https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html MySQL常见的日志类型包括: 错误日志(error log,https://dev.mysql.com/doc/refman/8.0/en/error-log.html) show variables like ‘%log_error%’; 二进制日志(binary log) 慢查询日志(slow query log,https://dev.mysql.com/doc/refm...
Redis日常命令笔记:Redis命令
redis命令命令使用推荐参阅:https://developer.aliyun.com/article/531067#cc1 1.【推荐】 O(N)命令关注N的数量例如hgetall、lrange、smembers、zrange、sinter等并非不能使用,但是需要明确N的值。有遍历的需求可以使用hscan、sscan、zscan代替。 2.【推荐】:禁用命令禁止线上使用keys、flushall、flushdb等,通过redis的rename机制禁掉命令,或者使用scan的方式渐进式处理。 3.【推荐】合理使用selectredis的多数据库较弱,使用数字进行区分,很多客户端支持较差,同时多业务用多数据库实际还是单线程处理,会有干扰。 4.【推荐】使用批量操作提高效率12原生命令:例如mget、mset。非原生命令:可以使用pipeline提高效率。 5.【建议】Redis事务功能较弱,不建议过多使用Redis的事务功能较弱(不支持回滚),而且集群版本(自研和官方)要求一次事务操作的key必须在一个slot上(可以使用hashtag功能解决) 6.【建议】控制key的生命周...
Mongo日常命令笔记:group and distinct
mongo命令group and distinct12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364demo data:db.getCollection('test111').insert([{"orderID" : "30688", "region" : "CO", "customerID" : "11396783", "productID" : "13001"},{"orderID" : "30688", "region" : "CO", "customerID" : "113...
Poetry:操作步骤
poetry常用命令 init 用于初始化项目,在项目目录下生成pyproject.toml文件,需要注意:执行这个命令时,会要求你输入pyproject.toml配置文件中的常用选项。 1$ poetry init install 上面也提到过,主要用来安装配置的依赖包,同时将依赖包信息写到poetry.lock文件中(首次)。 1$ poetry install update 上面提到过,主要用于获取最新版本的依赖,同时更新poetry.lock文件 1$ poetry update add 主要用于将依赖包添加到pyproject.toml文件中,同时会安装它们。 1$ poetry add requests pendulum remove 主要用于删除已经安装的依赖包。 1$ poetry remove pendulum show主要用于列出可用的依赖包,show后面可以加上依赖包的名称,显示更详细的内容。 1$ poetry show (requests) run主要用来执行python命令,会将run之后的命令放到python环境执行。 1$ poetry...