android逆向分析操作随笔

2018.5.24

分析博客:
https://jaq.alibaba.com/community/art/show?spm=a313e.7916646.24000001.7.Pa3lYS&articleid=339
https://jaq.alibaba.com/community/art/show?spm=a313e.7916646.24000001.1.JBgCEv&articleid=365

ida分析出的变量类型可随意转化,指针也可以,所以选择适当的类型可更直观。选中后按一下”y”键,然后将类型声明为”JNIEnv*”

smail代码可以修改,目前做不到java层修改,自己通过编译原理写一个!!!!

增加大量smali:
把想要增加的逻辑先用java写成一个apk,然后把这个apk反编译成smali文件,随后把反编译后的这部分逻辑的smali文件插入到目标程序的smali文件夹中,然后再在原来的方法上采用invoke的方式调用新加入的逻辑。

大多数反破解都有apk签校验,最好的做法是自己修改android源码解决。一劳永逸。libcore\luni\src\main\java\java\security\MessageDigest.java文件。将isEqual函数中的判断语句注释掉

so文件在被加载的时候会首先执行.init_array中的函数,然后再执行JNI_OnLoad()函数。后者好找,但前者是数据不识别为代码。首先打开view ->Open subviews->Segments。然后点击.init.array就可以看到.init_array中的函数了。p为创建函数。c为识别为代码。

ida动态中也可以F5,有时候你明明在一个函数中却无法F5,这时候你需要先按一下”p”键,程序会将这段代码作为函数分析,然后再按一下”F5”。

常见的反调试方法都会用fopen打开一些文件(/proc内的进程情况)来检测自己的进程是否被attach。

我们先在”F5”界面选择所有代码,然后用”Copy to assembly”功能,就可以把c语言代码注释到汇编代码里。可防止nop出错

ida可动态修改程序的一切,也可以静态修改文件的一切。
静态:Edit->Plugins->modifyfile更改成新so

因为ARM是没有单独的NOP指令的。于是我们采用movs r0,r0作为NOP,对应的机器码为”00 00 A0 E1”

ida的动态时的指针可快速(D)转化成自己想要的类型从而清晰显示

kill调试:
首先用ps获取运行的app的pid,然后用kill -19 [pid] 就可以将这个app挂起了。随后用ida attach上这个app。ida如何加载不同线程???

ida找不到模块文件也可以分析,只能看到内存中的状态?

脱壳工具多的很,但都会被针对,所以手动脱壳必会。

最基本的内存dump流程:
ida动态调试中
使用ida的script command去dump内存中的dex文件。

1
2
3
4
5
6
7
8
9
staticmain(void)
{
auto fp, begin, end, dexbyte;
fp =fopen("C:\\dump.dex","wb");
begin = r0;
end = r0 + r1;
for( dexbyte = begin; dexbyte < end; dexbyte ++ )
fputc(Byte(dexbyte), fp);
}

学习ida脚本!!!但许多壳完全动态修改dex等文件,很难dump。

使用ida直接反编译的代码:
defs.h头文件导入可识别ida定义的宏了。复制代码即可直接使用。

直接调用:
另外我们还可以自己创建一个NDK项目,然后自己编写一个so或者elf利用dlopen()和dlsym()调用目标so中的函数。比如我们想要调用libdvm.so中的dvmGetCurrentJNIMethod()函数,我们就可以在我们的NDK项目中这么写:

1
2
3
4
5
6
typedefvoid* (*dvmGetCurrentJNIMethod_func)();
dvmGetCurrentJNIMethod_func dvmGetCurrentJNIMethod_fnPtr;
dvm_hand= dlopen("libdvm.so", RTLD_NOW);
dvmGetCurrentJNIMethod_fnPtr =dlsym(dvm_hand,"_Z22dvmGetCurrentJNIMethodv");
dvmGetCurrentJNIMethod_fnPtr();

看雪分享的ida调试android技巧:
https://www.kanxue.com/chm.htm?id=10296&pid=node1000944