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.结果

   

 

      

 

 

 

 

 

  

posted @ 2016-08-18 17:13  黑炭BC  阅读(752)  评论(0编辑  收藏  举报