Android部分逆向笔记

Android部分逆向笔记

使用工具:
BlueStacks
ApkIDE
ApkToolkit
APK上上签

Daalvik字节码类型描述符
   V  void          只能用于返回值类型
   Z  boolean       变量值只能是 真(true) 或 假(false)
   B  byte          字节型
   S  short         短整型
   C  char          字符型
   I  int           整数型
   J  long(64位)  长整型
   F  float         浮点型
   D  double(64位)  双精度浮点型
   L  java类类型 package.name.ObjectName Lpackage/name/ObjectName;
   [  数组类型 [I表示一个整型一维数组,等于java中的int[]。注意多位数数组的维数最大为255个。[[I=int[][] [[[I=int[][][]
3.跳转指令
   if-eq   等于则跳转 ==
   if-ne   不等于则跳转 !=
   if-lt   小于则跳转 <  
   if-ge   大于或等于则跳转 >=
   if-gt   大于则跳转  >
   if-le   小于或等于则跳转 <=
   goto    无条件跳转
   switch  分支跳转

    返回0 实现跳转


   Pswitch_0
   。。。
   。。。
   。。。
   Pswitch_1
   。。。
   。。。
   。。。
   Pswitch_2
   。。。
   。。。
   。。。

4.方法调用指令 invoke

5.数据定义指令 const const-string

const-string v1,“youren”

6.操作指令 move

move v1,v2,

=======================================================  
.method
   invoke-virtual {v1}, Ljava/lang/String;->length()I  取V1长度 12345 =5
   
   move-result v2   将v1长度结果赋值给v2 v2=5

   const/4 v3, 0x1  v3=1
   goto :cond_1
   if-ne v2, v3, :cond_0
   
   :cond_1
   ...
   ...
   ...
   ...
   ...
   
   :cond_0
   return-void
.end method
============================================================
APK文件结构:

AndroidManifest.xml -配置清单
apktool.yml - 重新打包必须文件
assets - 资源
lib - native 动态库 so
res - 资源库
smali - classes.dex
META-INF -签名   
resources.arsc- 语言包
修改apk广告,去除广告
goto 语句  无限制跳转
if-eqz  不等于  if-enz等于修改
搜索.baidu.cn找到地址,删除,编译

逆向修改游戏道具,无需金币
逆向APK
首先apktool反编译找到程序启动点位置
找到购买成功,购买失败,以及删除等代码
然后手工修改购买成功的地方,默认成功为1
0则为不成功,那么就修改为1,编译,签名程序,执行测试
如果失败,就把原的dex修改,然后使用apktoolkit重建,签名,执行测试
就可以了

屏蔽支付失败修改方式
找到购买成功的判断代码,反之,所有结果不成立,则执行相应语句
复制成功的代码,到失败代码处,覆盖,重建DEX,签名程序,执行测试