MSC-2015移动安全挑战赛 第二题

此题apk和so都没有加壳,但是so里面的一个关键函数jolin是加密的,在so加载时解密。并且so加入了反调试技术。

由于我学习安卓的so调试是从比赛前3天开始的,也就会一个最最基本的。无法对抗反调试,一度想放弃这题。不过后来发现,这个反调试要到JNI_Onload函数退出后才触发。所以在JNI_Onload入口处下断点,添加watch,在4450这个地址(就是wojiushidaan这个字符串保存的地方)。F8一直走,看到这个地址的内容变化,就是答案了。

wKioL1TKGkPT9O7MAAJ0yVyyWZg699.jpg

securityCheck函数有价值的就是while循环,很明显就是用户输入的字符串和628c这个间接应用地址上的字符串比较。(实际地址在4450)

wKiom1TKGWLDgZlOAADs39a2H88052.jpg

关键函数,如果F7进去,可以发现jolin解密后的代码,这个函数用来解密出4450处的答案。

wKioL1TKGkTAmmy0AARr8gqTcEI842.jpg

hex view窗口可以看到4450地址内容的变化。

这题高手们有patch securityCheck函数的,利用__android_log_print输出4450的内容。(这个是我需要继续学习的――patch so)

还有是允许后dump出so,4450的地方就是答案了。


能做出这个题目纯属运气,因为反调试设置的要等到Onload退出才触发异常,而so的解码已经在Onload里面完成了。只需要正确分析出securityCheck函数用于比较的字符串存放的地方。根本需要去关心解密函数是如何被解密出来的。


期待哪位大牛能详细指点一下android的so里面所用到的反调试技术。

你可能感兴趣的:(调试,msc,android破解)