之前的笔记搬运
public.xml
apktoool 反编译 apk ,反编译后res/values 下有一个 public.xml 文件,内容如图
存放的是资源ID, 当正向开发时, 添加控件后, IDE会自动在R/ID里生成对应的ID号,
而在反编译后, 我们修改源码时, 可能需要添加新的控件, 为控件增加新的ID,
所以public.xml的作用就是指定一个控件的ID, 这样就可以再打包时,
反编译会自动把ID写入R/ID中;
格式:
1 | <public type="资源类型" name="资源名" id="0x7f080000" /> |
Dalvik和JVM的区别
JVM: 栈结构虚拟机, 效率低, 不依赖硬件平台, 访问内存时是采用栈地址 + 偏移的方式,
所以中间码不易阅读;
Dalvik: 寄存器结构虚拟机, 效率高, 依赖硬件平台, 访问内存时是采用寄存器名车方式,
所以中间码方便阅读;
JEB反编译大型软件可能闪退原因
- 虚拟内存占用过大
在启动JEB脚本中使用文本方式打开, 可以看到指定jeb工具解析时虚拟机使用的最大内存,
当反编译软件过大, 使用虚拟内存超过指定内存, 可能影响闪退;
1.超过最大的反编译函数个数
2.解析时间过长
当解析的工程过大, 超过设置的指定等待时间时, JEB也可能会闪退;
设置在 编辑 -> 选项 -> engines
手工编译DEX文件
1 | 1) 编译成 java class 文件 |
ODEX
1 | - odex优化过的dex, odex中把所有系统函数调用, 直接替换成虚表+偏移形式的调用, 速度更快, 但jeb的Q键不能识别; |
其他
libdvm中导出了所有的Davilk虚拟机使用的函数;
mprotect: 修改的目标地址需要页对齐, 分页大小不一定是0x1000, 使用sysconf可以获得系统信息, 使用PAGE_SIZE可以获得当前系统的分页大小, 具体参考帮助手册;
Linux内核
adb shell cat proc/kmsg 查看内核日志
hook ioctl这个api可以监控所有JAVA的API调用, 因为ioctl会通过binder驱动和system process通信, hook这里可以监控所有java层api的调用;