ollvm算法还原案例分享

  • A+
所属分类:逆向工程
ollvm算法还原案例分享
看雪论坛作者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。

ollvm算法还原案例分享

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

ollvm算法还原案例分享
ollvm算法还原案例分享


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


ollvm算法还原案例分享


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


ollvm算法还原案例分享


ollvm算法还原案例分享

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

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


- End -
ollvm算法还原案例分享


ollvm算法还原案例分享

 


看雪ID:奔跑的阿狸

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

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


ollvm算法还原案例分享
《安卓高级研修班》2021年秋季班火热招生中!


# 往期推荐





ollvm算法还原案例分享
公众号ID:ikanxue
官方微博:看雪安全
商务合作:[email protected]



ollvm算法还原案例分享

球分享

ollvm算法还原案例分享

球点赞

ollvm算法还原案例分享

球在看



ollvm算法还原案例分享

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

本文始发于微信公众号(看雪学院):ollvm算法还原案例分享

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: