如果可以,请自己编写so文件库,然后进行反编译自行学习。这样的进步是最快的。
这篇分析仅此一份,心血付出。
0x00 前言
说明
1.之前学习Android逆向的时候跑的太快,很多东西没有咀嚼直接吞咽,虽然看起来有一定成果,但是很快就进入瓶颈状态。所以逆向这东西还是要慢慢静下心来搞。
2.网上的分析文章大多都是拿来直接F5,虽然是快速解决问题,但是却不利于学习。依赖于机器终归不是一种好的学习方式,或许在工作中可以调高效率。
3.巩固基础知识,才能爬的更高。
4.看见汇编别怂,都是纸老虎,无非绕一点。
内容
1.亘古不变的HelloWord
2.有趣的+ - * /
3.论ARM处理%的复杂程度
4.探讨取代%会不会提高运行效率
4.python实现EOR逻辑的计算
0x01 亘古不变的HelloWord
如何搞到so文件?这个我稍微提一下。Android Studio 选c++.然后创建工程即可。不会请百度吧。有的东西不重复。
学编程很多都是从HelloWorld开始的,逆向当然也可以从HelloWorld开始啦。当然由于太简单,会缩短篇幅。
1. 程序代码
不解释。
void Hello()
{
printf("HelloWorld");
}
2. 逆向so文件
这个就是我们的ARM汇编文件了。
PUSH {R7,LR}
MOV R7, SP
SUB SP, SP, #8
ARM准备阶段,可以选择性忽视。
ADD SP, SP, #8
POP {R7,PC}
ARM结束字段,也可以选择性忽视。
但是看到这里,可以简单的理解一下,就是首先开辟内存,用完之后就是释放内存。
剩下的还有什么
LDR R0, =(aHelloworld - 0x430C)
ADD R0, PC ; "HelloWorld"
BLX printf
STR R0, [SP,#0x10+var_C]
LDR