Android重打包一次实践
0x0.前言
在分析样本的时候,由于样本对时间作了检验,然后超出了允许时间,想要动态跑就不行,所以这次准备重打包样本,然后动态跑跑
0x1.开始工作
- 要修改的就是这两个字段
- 用JEB脚本Byte2Char.py看就是下面的东西
- 用集成工具或者命令行来获取smali,然后定位到要修改的smali代码处
- 嗯~看不懂smali?没关系,一行一行来
- 首先,这是文档
- 这里我们需要的理解的smali也就几行而已
- new-instance vx,类型ID 根据类型ID或类型新建一个对象实例,并将新建的对象的引用存入vx
new-instance v0, Ljava/lang/String;这里自然就是新建一个string实例
-
-
- new-array vx,vy,类型ID 根据类型ID或类型新建一个对象实例,并将新建对象的引用存入vx,vy是长度
-
文档里面的new-array v1,v3, [B,其中[B就是byte数组的意思,更多Dalvik字节码类型知识可以戳这个,v3 = 0x13,,也就是说新建一个长度为19的字符数组
-
-
- fill-array-data vx,偏移量 用vx的静态数据填充数组引用,静态数据的地址是当前指令位置加偏移量的和
-
这里的数据就是我们要修改的
-
-
- invoke-direct {参数},方法名 不解析直接调用带参数的方法
-
invoke-direct {v0, v1}, Ljava/lang/String;-><init>([B)V 这里用的是构造函数,似乎有点特殊,v0是返回值,v1是参数(我是这样理解的)
-
-
- sput-object vx,字段ID 根据字段ID将vx寄存器中的对象引用赋值到对象引用静态字段
-
sput-object v0, Lcom/system/a/a/p;->c:Ljava/lang/String;这里自然就是将返回的字符串赋值给 类p的 string:c
- 嗯~该做准备工作都做了,现在就是改代码里的时间了,就是替换上图几个byte
将0x37(代表七月),改成0x39(代表九月),这样就可以运行了。
0x2.重打包
有关于重打包的技术网上很多介绍了,逆向许多工具都有介绍,这里就不多说啥了,给几个链接
http://blog.csdn.net/lpohvbe/article/details/7983907
http://www.freebuf.com/sectool/111532.html
http://www.cnblogs.com/ayanmw/p/3720804.html
注意有些用法是会变的,比如apktool,版本变化,用法也变了,早期1版本是
java -jar apktool.jar d EFE.apk apkfile
后来2版本是java -jar apktool.jar d EFE.apk -o apkfile,具体参数可以直接在命令行里输入apktool,再回车,看参数
其实有许多工具集成了这些,也可以用集成的工具,方便
0x3.结果