返回列表 发新帖

[闲聊] 什么、

[复制链接]

39

主题

719

回帖

4221

积分

大学生

Rank: 5Rank: 5

金币
2065
好评
12
信誉
98

MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员

QQ
发表在  2019-3-1 10:39:46 | 显示全部楼层 | 阅读模式  来自 湖北
本帖最后由 枫少丶夜 于 2019-3-1 10:43 编辑

第一、利用IDA静态分析native函数

1.isEquals函数分析
函数指令代码:

简单分析指令代码:
1>、PUSH {r3-r7,lr} 是保存r3,r4,r5,r6,r7,lr 的值到内存的栈中;与之对应的是POP {r3-r7,pc}

pc:程序寄存器,保留下一条CPU即将执行的指令
lr: 连接返回寄存器,保留函数返回后,下一条应执行的指令

2>、调用strlen,malloc,strcpy之前一般都是由MOV指令,用来传递参数值的,比如这里的R5里面存储的就是strlen函数的参数,R0就是is_number函数的参数;在后面的动态调试的过程中可以得到函数的入口参数值。

3>、在每次调用有返回值的函数之后的命令,一般都是比较指令,比如CMP,CBZ,或者是strcmp等,这里是我们破解的突破点,因为一般加密再怎么厉害,最后比较的参数肯定是正确的密码(或者是正确的加密之后的密码)和我们输入的密码(或者是加密之后的输入密码),我们在这里就可以得到正确密码,或者是加密之后的密码:如上图。

到这里,我们就分析完了native层的密码比较函数:isEquals

2.可以使用F5键,查看他的C语言代码:

3>、在每次调用有返回值的函数之后的命令,一般都是比较指令,比如CMP,CBZ,或者是strcmp等,这里是我们破解的突破点,因为一般加密再怎么厉害,最后比较的参数肯定是正确的密码(或者是正确的加密之后的密码)和我们输入的密码(或者是加密之后的输入密码),我们在这里就可以得到正确密码,或者是加密之后的密码:如上图。

到这里,我们就分析完了native层的密码比较函数:isEquals





回复

使用道具 举报

49

主题

2415

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
5865
好评
8
信誉
101

MT论坛帅哥考神MT论坛活跃会员挂机大佬

发表于 2019-3-1 17:08:16 来自手机  | 显示全部楼层  来自 河北
感谢楼主
回复

使用道具 举报

快速回复 返回顶部 返回列表