七寸往事 发表于 2014-10-31 18:30

ARM静态反编译逆向

首先要到JAVA中找到程序的原型(用JD-GUI),为是查看传入的参数和返回
参数为byte数组,返回也是byte数组


然后找到在IDA打开libyyjni.so进行反编译


好了,现在大概了解一下汇编的JNI的东西.为了了解JNI,得自己会写一点JNI.根据上面的函数,也写个大概类似的函数

在JNI中,第一个参数为JNIEnv,固定,可以理解为一个类的指针,类里包含了C++与JAVA数据转换的方法,比如把JAVA中的Byte数组转为C++下的jbyteArray

第二个参数为thiz,固定,即相当于JAVA下的this,指向当前类的指针.

第三个才是用户自定的参数, Byte[]在C++下就是jbyteArray
回到 Java_com_duowan_mobile_service_GenKey_generateKey
R0 是 JNIEnv*
R1是thiz
R2 是第一个参数
第1行 PUSH    {R4-R7,LR} 如果压入寄存器从R3开始,表示没有参数,从R4则表示有一个或以上.LR是要返回的地址.调用时自动压入LR.
//// 最后一行 POP   {R4-R7,PC},一般是和第一行执行相反的出栈动作.将LR放入到PC,PC是下一条命令的地址,改变它的值也就相当跳转.

第2行 MOV   R7, R8      把R8传给R7,

第3行 PUSH    {R7}      再把R7压入. 相当于把R8也存压入栈,似乎PUSH一次只能压入8个寄存器,所以超过8个要另行压入.

第4行 MOVS    R6, R2   把R2传给R6,即把第一个参数Byte[]再放R6中,注意到第二是MOV,这一行是MOVS,其实都差不多,只MOVS会影响到影响CPSR

第5行 LDR   R2,    取出R0指针所指向的值放到R2,即取出JNIEnv* ,也就是JNIEnv (JNIEnv*其实是一个指向指针的指针)

第6行 MOVS    R3, #0x2AC   将0x2AC传入到R3中,下面介绍用途

第7行 SUB   SP, SP, #8   SP指当前栈,此处栈的位置减去8,作用不明.

第8行 LDR   R3,     取出R2即JNIEnv(第5行),并偏移0x2AC所指向的内存的值.放到R3中,JNIEnv+0x2AC指向的是GetArrayLength
见下面(所有的函数在附件中)

第9行 MOVS    R1, R6         这是GetArrayLength第二个参数(第4行),即第一个参数Byte[]
第10行 MOVS    R4, R0         RO一般是放返回值的,调用函数后会被覆盖的,所以复制到R4中

第11行 BLX   R3             调用GetArrayLength, 第一个参数是R0,是JNIEnv,本来就在R0的,所以现在直接调用GetArrayLength,获取数组的长度

第13行LDR   R2,        R4就是JNIEnv*(第10行),取出JNIEnv放到R2中

第14行MOVS    R3, #0x2E0   将0x2E0传入到R3中

第15行LDR   R3,     取出JNIEnv+0x2E0指向的值,查表,是GetByteArrayElements

第16行MOVS    R1, R6         第二参数是本函数的第一个参数Byte[](第4行)

第17行MOV   R8, R0         R0现在放着是上面GetArrayLength的返回值,为了不被下面的返回值覆盖,要复制到R8中

第18行MOVS    R2, #0         第三个参数是0

第19行MOVS    R0, R4         第一个参数是JNIEnv*

第20行BLX   R3             调用GetByteArrayElements

第21行 MOVS    R7, R0         R0现在放着是上面GetByteArrayElements的返回值,为了不被下面的返回值覆盖,要复制到R7中

第22行 MOVS    R0, #0x10      第一个参数10

第22行 BL      _Znaj         ; operator new[](uint)   即int myint;

SoulKingLHW 发表于 2014-10-31 18:36

前排!看大牛你!

黑龍 发表于 2014-10-31 18:43

自己分析 ?

yyz219 发表于 2014-10-31 19:07

Avenshy 发表于 2014-10-31 19:33

膜拜楼主 没搞过这个 顺便前排兜售饮料瓜子爆米花

manbajie 发表于 2014-10-31 20:24

只能膜拜大神了

LCH111 发表于 2016-8-10 18:22

挖坟{:1_927:}{:1_927:}非常感谢楼主

Loopher 发表于 2016-8-11 09:21

又涨姿势了~

kingkaling37 发表于 2016-9-30 19:53

good good

(り帕克先森 发表于 2017-3-14 22:53

谢谢分享,很有帮助
页: [1]
查看完整版本: ARM静态反编译逆向