攻防世界 BABYRE

拖进IDA,发现jugde部分反编译不出来
然后看main函数
攻防世界 BABYRE
7-11行有奇怪的操作(好像是花指令?),所以写个IDApy
攻防世界 BABYRE
s是judge的起始位置,运行脚本后,将有红色报错的代码按U(取消原来定义),再按 C(重新生成汇编代码),选中600B00-600BB5(judge 的起止位置)按P(重新生成 function)。
然后就可以按F5生成judge的伪代码了。
攻防世界 BABYRE
再然后把这个解出来就行

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int a[]={102,109,99,100,127,107,55,100,59,86,96,59,110,112};
int n=14;
int main()
{
    for(int i=0;i<n;i++)
        printf("%c",(char)(a[i]^i));
    return 0;
}

攻防世界 BABYRE
另一个看来的方法:在第12行设置断点(即自解密完成后),动态调试运行到这个位置时,程序已解密,查看 600B00-600BB5(judge 的起止位置)的代码,按上述同样方式修复出错的地方(用 U C P 键)。将有红色报错的代码按U(取消原来定义),再按C(重新生成汇编代码),选中 600B00-600BB5(judge 的起止位置)按P(重新生成 function)。这时就可以按F5生成judge的伪代码了。

上一篇:Linux之用户管理


下一篇:利用python3的ipaddress包实现ip内外网判定