a1046830 发表于 2019-10-12 18:25

某游戏手机动态密保锁算法逆向1---smali算法定位

本帖最后由 a1046830 于 2019-10-12 18:27 编辑


界面长这样的



它的位动态每隔30秒变化一次,用jeb打开它的APK,反编译之后,它的代码长这样
   


函数混淆得很严重,不过没有关系。有个很快捷的方法定位它的动态密保生成算法,需要两个工具 Android SDK 和手机模拟器(android 5.1),打开SDK tools中的此工具,然后模拟器上运行此程序

接着

会出现软件主界面截图,鼠标一滑就能看到各个按钮和UI设计的id和包名



找到它的ID了,然后用android killer打开APK进去搜索,发现可疑目标


仔细一看 下面还有id是firstPwd、secondPwd...sixPwd这不就是6位密码吗。。。。那就搜索firstpwd,出现UnlockFragment.smali,点进去反编译(我不习惯Android killer 我用JEB打开看)


反编译查看源码,看到了这个函数,应该就是6位动态密码的设置了,看到有个OTPKEY,猜测这个是OTP算法,看到这个界面引用一个包import com.yoo_e.android.token.OTPKey;打开com.yoo_e.android.token.OTPKey。


里面代码不多,所以很快就能定位到算法


这个是一两年前的版本,在前两个月的版本中UnlockFragment.smali里的六位动态密码设置函数长这样


这个个更简单,就点击函数跟踪一下,一路套娃,全是函数a。。。。。。到这一路继续,最后也能跳到OPTKEY

这个版本的算法源码更好看一些,而且更舒服的是我最后将算法用JAVA写出来测试的时候这上边的代码我几乎没变
其实这个版本定位算法还有个个简单的方式,它里面有大量的Logcat,所以直接cmd adb logcat 看到一大堆有用的东西

之后搜索然后跟踪函数还是能定位到算法。定位到算法不难,就是有些花时间,而且她的函数全是abc看得眼花。
要用JAVA实现算法的话其实有点麻烦,它OTP算法里面有个byte数组是由设备号加密生成的,不怎么好找。我放到我下一篇帖子里贴出来
(主要是要在求职区发帖找工作需要三篇技术帖。。。。我只能水一下,大佬们看看图个乐)


a1046830 发表于 2019-10-12 21:01

lmy800 发表于 2019-10-12 20:29
................GWW会不开心的。。。

我之前已经把这个提交给他们公司了。我刚才看了下,他们也发布了新版本,应该有修改我说的吧,我发的帖子是我拿上几个版本apk逆的。

a1046830 发表于 2019-10-12 21:07

山阴路往哪走 发表于 2019-10-12 21:03
看的不是很明白啊

可能是我写得比较粗糙,这个核心就是根据UI控件ID 搜索到smali文件之后jeb查看函数调用就可以了。

zhu0797zhu 发表于 2019-10-12 18:49

表示看不懂,大神威武。

夜东从 发表于 2019-10-12 20:15

这太真实了

lmy800 发表于 2019-10-12 20:29

................GWW会不开心的。。。

山阴路往哪走 发表于 2019-10-12 21:03

看的不是很明白啊

jinyecheng 发表于 2019-10-12 22:41

向高手看起呀。

u7c 发表于 2019-10-13 00:06

厉害了~~~~~~~学习下

Windows10 发表于 2019-10-13 10:06

感谢分享教程
页: [1] 2
查看完整版本: 某游戏手机动态密保锁算法逆向1---smali算法定位