终于找到了一道用花指令的题了
先脱壳,然后进入ida
参考我的这篇文章:花指令
所以先把jnz给nop掉:
edit >> Patch program >> Change byte >> 前两位改为90
将花指令nop掉后,选中红色代码段,然后键盘p一下得到main函数
可以看到,wasd四个键控制移动,并且带有–和++的效果,然后后面一个if else判断语句,要让dword_408078 = 5,dword_40807C = -4,才能得到flag
点进去看看dword_408078和dword_40807C
那么7c初始是0,最后要等于-4,而s控制7c的–,这说明是往下走呗
shift + f12看字符串,然后shift+e提取数据得到:
关于为什么是7x10,那是看大佬wp知道的,我看大佬们做过的题也是7x10,所以就7x10.。。。。。
这是个apk文件,我们需要下载一个jadk
下载完jadx和jadx-gui之后,用windows命令:java -jar jadx-gui.exe
启动jadx
打开apk文件,我们进行文本搜索:mail
找到函数:sendmail
我们查看:查找声明
找的是邮件,我们看通讯录
发现MAILSERVER,进入跳到声明
这个就是邮件了,而要进入MAILSERVER函数,首先要对NativeMethod.m进行base64加密
选中那一行继续跳到声明,发现是空的
而Java中的NativeMethod函数一般用于调用外部文件,所以我们ida打开so文件
我们解压apk文件,在lib文件夹里的armeabi文件夹里面有个so文件,用ida打开
找到字符串进行base64解密即可
也可以在exports里面找到NativeMethod_m
双击进入,发现被加密字符串
进入ida,shift+f12找字符串
进入,查看伪代码,但好像看不了,也没有花指令,只能看汇编了
首先byte_4212C0是我们输入的字符串
edx在自增,之后跟1B(也就是27)进行比较,可以大胆猜测flag长度是27
然后byte_4212C0的第eax位跟al进行异或(al也就是eax的后八位,其实就是自增的位,也就是 i 了)
接着就和byte_41EA08的第eax位进比较(而byte_41EA08给出了字符串)
然后eax(可以看成 i 了)自增,继续循环
那么就能写出脚本:
#include暑期编程PK赛 得CSDN机械键盘等精美礼品!#include #include int main() { char a[27] = {77, 83, 65, 87, 66, 126, 70, 88, 90, 58, 74, 58, 96, 116, 81, 74, 34, 78, 64, 32, 98, 112, 100, 100, 125, 56, 103}; char flag[27]; for(int i=0;i<27;i++){ flag[i] = a[i] ^ i; } printf("%s",flag); return 0; }



