一、 第一周(C++函数编译规则)
要求
c/c++代码编译时,对于函数名的编译规则是怎样的。从而还原函数名和相关参数
技术点
C++函数编译规则
个人做法
要求是自己还原函数名和相关函数,所以直接放ida里面,得到函数名与参数是不可取的!
所以不使用怎么查看so的信息呢?
参考的是linux 的readelf命令查看so文件
lunix下通过readelf -s 查看so
_Z4testiPc 这个就是我们要还原的函数
通过参考 : GNU C++的符号改编机制介绍(函数的名称粉碎格式解析)
_Z表示全局函数,4表示函数名长度为4,test表示函数名称,i表示返回值为int,Pc表示char指针,所以还原函数为:int test (int, char *)
so地址
链接: https://pan.baidu.com/s/1cD81eKTqzKjkTjVbXvsFOw 提取码: 3gqp
二、 第二周(某新壳原理的了解,对于新手难,不推荐看这个例题!)
前言
该例题对于新手十分不友好,我现在卡在一半并没有完成,等后续完成会再更。
想学习的就直接从第三周开始看吧,这个例题是给早了,现在阶段的能力不好解决,还是从第三周开始找回自信吧。
要求
大佬原话 : 本例题属于某新壳原理的了解,算是这种类型壳的基础。但是属于一般壳的进阶。
中途卡着继续不下去了 大佬说:隐藏的代码,如果静态逆向dex没有找到,可以试试动态调试。当然,最后核心还是得落实到native里面去。
技术点
个人做法
安装apk、打开就一个输入框一个Button
什么都不输入点击button
随便乱输入点击button也是一样
将apk扔入jadx查看,果然是加壳的
这咋办,网上找脱壳教程工具。找到了FDex2,看着元芳这霸气的样子,顿时觉得这波稳了。
开始设置
ok,勾选一下就完成配置够简单
再次打开例题apk,随便点击几下
进入/data/data/com.kanxue.crackme02 目录,果然多了几个dex
将这几个apk拷出来
放入jadx中
第一个dex没用
第二dex也没用
第三个dex还是没用
第四dex,就是它了,来看看MainActivity,
一下就看到了Sorry,try again?,那岂不是上面的Congratulations!就是正确的逻辑了,胜利只差一步,来看看上面的逻辑是怎样的
来看下check方法,check方法中先调用copyAssetAndWrite方法,copyAssetAndWrite方法就是将Asset下的a.bin拷贝到cache目录
继续看testDexClassLoader方法,该放就是将a.bin当做一个dex加载,调用其中的com.kanxue.test02.TestClass类的testcontent方法。所以直接看a.bin中testcontent方法中校验逻辑就可以得到正确值了!
说干就干,将a.bin考出来,放入jadx中,发现并不能解析(当时脑子有点抽,一个dex文件怎么可能解析),然后机智(傻*)的我将a.bin放入了ida,摸索着看了一下午得到了令我无法接受的事实,这是一个死循环,无论怎么都不能返回true。
还是看java代码好看点,下面是用dex2jar将a.bin转成jar后放入jadx中的java代码(淦!)
以上便是分析过程,现在还被卡在这儿了。第三周已经完了,第二周的例题仍然无法解决,等以后能解决了再来更新吧。
apk地址
链接: https://pan.baidu.com/s/1Cq1fR4UQUPPDrk35BKAZlQ 提取码: swrd
有兴趣的可以自己上手试下。。。。