APK Crack Write Up 2017年全国大学生信息安全竞赛信息安全技能赛

首先把apk拖进JEB看一下Manifest.xml文件,找一下主类,没有被隐藏,找到主类代码反编译:

发现有个涉及到JNI函数show,于是逆向一下这个so文件,首先通过函数名找到这个方法:

进去之后反编译拿到伪代码:

拿到伪代码以后,有个技巧,点击v1,按y,然后输入JNIEnv*,就可以拿到各个函数的名字,因为原来的都是用v1加上一个偏移地址表示的,然后会发现这里好像一切都很平静?于是继续看原来main的代码,发现有个check,很长!还有一堆goto与标号。。。

于是想到用动态调试,对于JNI层的代码可以用IDA直接动态,对于Java层,可以用JEB加虚拟机或者真机,我用真机找不到进程的名字,于是放到虚拟机里边运行,失败,因为虚拟机是x86的镜像,到网上到处查找解决方法,都很复杂,甚至还要用别的模拟器,在就要放弃的时候。。。直接用AS下了一个ARM的镜像建立虚拟机,然后速度特别慢,但是可以运行了?!

整个check函数实际上只有一个return 1的出口,于是在这里下断点(Ctrl+B):

记得一定要在debug前运行程序,然后选择进程Attach一下,这个时候我遇到了一个新的问题,JEB提示“Could not attach to target”,查了一下是:

1、原因Error: Could not attach to target 是因为你打开了eclipse/androidstudio/ddms,ddms导致jeb不能附加指定的应用。2、解决办法:关闭ddms,ddms在eclipse/android studio中,关闭这种应用。

解决以后直接开,随便输入一个测试的字符串,然后会停在这里,利用VM/Locals,看一下这里的数组B。

写个程序,转换一下数组中前几个元素:

#include <iostream>

#include <cstdio>

using namespace std;

int main() {

     inta[] = {99, 108, 111, 53, 101, 114};

     for(inti = 0; i < 6; i++) {

          printf("%c",a[i]);

     }

     return0;

}

就可以拿到flag。


猜你喜欢

转载自blog.csdn.net/wannafly1995/article/details/80881562