查看原文
其他

ollvm算法还原案例分享

奔跑的阿狸 看雪学苑 2022-07-01
看雪论坛作者ID:奔跑的阿狸




看雪3W班12月ollvm题,重点考察去混淆。



1


解题思路


得益于Unicorn的强大的指令trace能力,可以很容易实现对cpu执行的每一条汇编指令的跟踪,进而对ollvm保护的函数进行剪枝,去掉虚假块,大大提高逆向分析效率。


通过对题目的考察,学习到如下知识点:

1、使用unidbg获取trace日志
2、ida python常用函数的复习,遍历函数指令,并做修改
3、利用常量表识别base64编码



2


详细步骤


1、apk拖入jadx,获取基础信息。


com.kanxue.crackmecom.kanxue.crackme.MainActivitypublic boolean check(String content) {if (jnicheck(content)) {return true;}return false;}

System.loadLibrary("native-lib");public native boolean jnicheck(String str);public static native boolean crypt2(String str);


2、利用frida去hook关键函数,同时输入字符,点按钮验证,观察日志后发现:jnicheck是我们的输入、crypt2是输入字符串+字符串666。

3、IDA分析so,直接跟踪到关键函数sub_22390、sub_19a60;发现都是ollvm混淆的,没法看。


4、用unidbg跑关键的crypt2函数,并拿到trace日志,其中重要的是地址。



5、根据题目提示信息——利用trace日志进行剪枝,查了下IDAPython API,编写剪枝代码,对2个函数剪枝。发现关键函数sub_19a60就是base64、sub_22390就是很简单的调用。




6、frida直接看strcmp函数参数:

sub_strcmp:WFVlNjY2 WFVlNjY2,对参数0解base64=XUe666,再去掉666。明文就是XUe。


- End -


 


看雪ID:奔跑的阿狸

https://bbs.pediy.com/user-home-717171.htm

  *本文由看雪论坛 奔跑的阿狸 原创,转载请注明来自看雪社区。


《安卓高级研修班》2021年秋季班火热招生中!


# 往期推荐





公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



球分享

球点赞

球在看



点击“阅读原文”,了解更多!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存