今天练练手 做一个跳过签名验证的练习

下手的app :
file

1. 分析apk

首先拖入AndroidKiller
选择不分析
file

编译打包
file

拖入模拟器
file

发现直接停止运行
下面来找原因
file

2. 分析

拖入GDA3.72 打开入口 发现可以函数调用
file

进去看看
file

读取了签名 但是没有干啥事情
进kille把这段改掉,试试看
file
file

发现崩溃依旧
继续回到入口找
file

可可疑 进去看看
file

发现是native
搜索加载的so
file

在这里

拖入ida 找这个地方
file

发现是静态注册 直接进去f5

file

跟进去
file

就是这里了

返回上一级 把调用的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
.text:00000D44                 ; int __fastcall Java_com_bug_bt_MainActivity_bug(JNIEnv *env, jobject obj)
.text:00000D44                                 EXPORT Java_com_bug_bt_MainActivity_bug
.text:00000D44                 Java_com_bug_bt_MainActivity_bug        ; DATA XREF: LOAD:00000174o
.text:00000D44                 ; __unwind {
.text:00000D44 000 10 B5                       PUSH    {R4,LR}
.text:00000D46 008 04 1C                       MOVS    R4, R0
.text:00000D48 008 FF F7 58 FF                 BL      getSignHashCode          ; 这几句干掉 不去调用就可以 具体方法就是nop掉  ida装一个keypatch 直接改
.text:00000D4C 008 22 68                       LDR     R2, [R4]
.text:00000D4E 008 04 49                       LDR     R1, =(aHttpWwwBtsouOr - 0xD58) ; "http://www.btsou.org/web?q="
.text:00000D50 008 A7 23 9B 00                 MOVS    R3, #0x29C
.text:00000D54 008 79 44                       ADD     R1, PC          ; "http://www.btsou.org/web?q="
.text:00000D56 008 D3 58                       LDR     R3, [R2,R3]
.text:00000D58 008 20 1C                       MOVS    R0, R4
.text:00000D5A 008 98 47                       BLX     R3
.text:00000D5C 008 10 BD                       POP     {R4,PC}
.text:00000D5C                 ; End of function Java_com_bug_bt_MainActivity_bug

file

file

成功!

file