题的质量还是可以,有些题因为遇到一些问题,没解出来。花时间来写wp一是巩固一些知识点,还有让更多的人可以互相学习。
看题目就知道代码肯定被smc处理过了,所以直接动调就ok,也没有反调试。
先看前面部分。

看看base64加密过程

密文和比较。

解密脚本
这道题,流程很乱,通过动调看内存会使分析变的简单。但是也有坑,就是flag的大小写的问题,多试吧。
前面部分。

中间数据处理。

脚本
解出所有数据,拼接起来得到,SangFor{2C7BD2BF862564BAED0B6B6EA94F15BC},但是不对,然后又一组一组的试,看看哪出了问题,发现是某一组大小写问题,得到SangFor{2C7BD2BF862564baED0B6B6EA94F15BC}
elf文件,代码也被加密了,也有自解密函数。
先看看main函数

然后vm内部就只有自己去慢慢调试分析大概逻辑了。
大概有3中方式加密,前32个字符是异或,然后后面4个是一些运算的加密,后面8个字符又分为两组进行同一种运算方式方式加密。
写了个c来打印其过程。
前面32个字符如下结构,就是一个异或
后4个字符逻辑如下
需要特别注意的是里面的0x80对应的指令,比赛时就是在这花了很多时间,还好一步步调,最后找到了。

解法可以考虑爆破,4个字符,也不是很多。
后面8个字符,加密过程也有坑,就是*和<<会产生溢出。也是考虑爆破解。
得到SangFor{16584abc45baff901c59dde3b1bb6701a254b06cdc23}
对apk的分析确实比较少,有点可惜,当时不知道为什么md5去网上解,没解出来,看来得多用几个网站。
拖到jeb看流程。

去看md5解密,现在网站解密又可以解出来了。。。654321

看看key怎么生成的

得到key

去看加密encode函数。

解密
Debug Blocker,这种技术还可以用来hookAPI,还是挺有意思,逆向工程核心原理中也有讲解,之前mrctf也遇到过,流程分析起还是不难,就是解的时候总是各种细节问题。。。。,后面看了师傅的wp来看看出现的问题。
浏览过整体框架可以知道,需要输入3个password。
先看看第一个,太大了 爆出来要等太久,用z3确实会快很多。

输入完password1后就会触发一个int3异常,动调看看,注意main函数中的IsDebuggerPresent(),断点打在sub_140001270()中,也就是程序自己的异常处理函数。

然后去新exe查看该函数,0014000187F处p键

所以password2就是10个字符分5组进行xtea加密,xtea解密如下
password3,引发异常,伪随机数。

然后直接set,ip动调,得到rand()产生的数,虽然生成了32个,实际上只用了前16个。

然后看看乱序函数,通过看比较部分就行了。

问题就来了怎么逆回去,yyds的bxb师傅用了一个小技巧,rand()产生的数有两个字节,我们的字符只有一个字节,xor不会改变高字节的数,所以我们可以通过高字节的数来还原顺序,确实是比较妙,然后我是想直接自己输入假的字符串,然后得到假密文,从而知道乱序规律,然后逆回去,但是好像不可取,顺序还是乱的。
拼接一下GWHT{r3_1S_s0_fuNny_d0_YoU_1ik3_t0o}
流下太菜了的泪水,有师傅已经发了详细的wp了,https://bbs.pediy.com/thread-269328.htm,tql,tql,也该学习一下高级一点的东西了。
import base64
t=[]
encstr = 'H>oQn6aqLr{DH6odhdm0dMe`MBo?lRglHtGPOdobDlknejmGI|ghDb<4'
xor = [0xa6, 0xa3, 0xa9, 0xac]
for i in range(len(encstr)):
t.append(ord(encstr[i]) ^ xor[i % 4])
t[-1]=0xE4
base1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
base = [0xE4, 0xC4, 0xE7, 0xC7, 0xE6, 0xC6, 0xE1, 0xC1, 0xE0, 0xC0,
0xE3, 0xC3, 0xE2, 0xC2, 0xED, 0xCD, 0xEC, 0xCC, 0xEF, 0xCF,
0xEE, 0xCE, 0xE9, 0xC9, 0xE8, 0xC8, 0xEB, 0xCB, 0xEA, 0xCA,
0xF5, 0xD5, 0xF4, 0xD4, 0xF7, 0xD7, 0xF6, 0xD6, 0xF1, 0xD1,
0xF0, 0xD0, 0xF3, 0xD3, 0xF2, 0xD2, 0xFD, 0xDD, 0xFC, 0xDC,
0xFF, 0xDF, 0x95, 0x9C, 0x9D, 0x92, 0x93, 0x90, 0x91, 0x96,
0x97, 0x94, 0x8A, 0x8E]
ans = ''
for i in t:
ans += base1[base.index(i)]
print(ans)
print(base64.b64decode(ans))
import base64
t=[]
encstr = 'H>oQn6aqLr{DH6odhdm0dMe`MBo?lRglHtGPOdobDlknejmGI|ghDb<4'
xor = [0xa6, 0xa3, 0xa9, 0xac]
for i in range(len(encstr)):
t.append(ord(encstr[i]) ^ xor[i % 4])
t[-1]=0xE4
base1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
base = [0xE4, 0xC4, 0xE7, 0xC7, 0xE6, 0xC6, 0xE1, 0xC1, 0xE0, 0xC0,
0xE3, 0xC3, 0xE2, 0xC2, 0xED, 0xCD, 0xEC, 0xCC, 0xEF, 0xCF,
0xEE, 0xCE, 0xE9, 0xC9, 0xE8, 0xC8, 0xEB, 0xCB, 0xEA, 0xCA,
0xF5, 0xD5, 0xF4, 0xD4, 0xF7, 0xD7, 0xF6, 0xD6, 0xF1, 0xD1,
0xF0, 0xD0, 0xF3, 0xD3, 0xF2, 0xD2, 0xFD, 0xDD, 0xFC, 0xDC,
0xFF, 0xDF, 0x95, 0x9C, 0x9D, 0x92, 0x93, 0x90, 0x91, 0x96,
0x97, 0x94, 0x8A, 0x8E]
ans = ''
for i in t:
ans += base1[base.index(i)]
print(ans)
print(base64.b64decode(ans))
int main()
{
int a,b;
for(a=0;a<=0xffff;a++)
{
b=0;
b=(a-0x9393)&0xffff;
if(a*b== 0xE5FD104)
{
printf("%X %X",a,b);
}
}
}
int main()
{
int a,b;
for(a=0;a<=0xffff;a++)
{
b=0;
b=(a-0x9393)&0xffff;
if(a*b== 0xE5FD104)
{
printf("%X %X",a,b);
}
}
}
int main()
{
int opcode[]={ 0xA1, 0xC1, 0x00, 0xB1, 0x77, 0xC2, 0x4A, 0x01, 0x00, 0x00,
0xC1, 0x01, 0xB2, 0x77, 0xC2, 0x19, 0x01, 0x00, 0x00, 0xC1,
0x02, 0xB4, 0x77, 0xC2, 0xDD, 0x01, 0x00, 0x00, 0xC1, 0x03,
0xB3, 0x77, 0xC2, 0x0F, 0x01, 0x00, 0x00, 0xC1, 0x04, 0xB2,
0x77, 0xC2, 0x1B, 0x01, 0x00, 0x00, 0xC1, 0x05, 0xB4, 0x77,
0xC2, 0x89, 0x01, 0x00, 0x00, 0xC1, 0x06, 0xB1, 0x77, 0xC2,
0x19, 0x01, 0x00, 0x00, 0xC1, 0x07, 0xB3, 0x77, 0xC2, 0x54,
0x01, 0x00, 0x00, 0xC1, 0x08, 0xB1, 0x77, 0xC2, 0x4F, 0x01,
0x00, 0x00, 0xC1, 0x09, 0xB1, 0x77, 0xC2, 0x4E, 0x01, 0x00,
0x00, 0xC1, 0x0A, 0xB3, 0x77, 0xC2, 0x55, 0x01, 0x00, 0x00,
0xC1, 0x0B, 0xB3, 0x77, 0xC2, 0x56, 0x01, 0x00, 0x00, 0xC1,
0x0C, 0xB4, 0x77, 0xC2, 0x8E, 0x00, 0x00, 0x00, 0xC1, 0x0D,
0xB2, 0x77, 0xC2, 0x49, 0x00, 0x00, 0x00, 0xC1, 0x0E, 0xB3,
0x77, 0xC2, 0x0E, 0x01, 0x00, 0x00, 0xC1, 0x0F, 0xB1, 0x77,
0xC2, 0x4B, 0x01, 0x00, 0x00, 0xC1, 0x10, 0xB3, 0x77, 0xC2,
0x06, 0x01, 0x00, 0x00, 0xC1, 0x11, 0xB3, 0x77, 0xC2, 0x54,
0x01, 0x00, 0x00, 0xC1, 0x12, 0xB2, 0x77, 0xC2, 0x1A, 0x00,
0x00, 0x00, 0xC1, 0x13, 0xB1, 0x77, 0xC2, 0x42, 0x01, 0x00,
0x00, 0xC1, 0x14, 0xB3, 0x77, 0xC2, 0x53, 0x01, 0x00, 0x00,
0xC1, 0x15, 0xB1, 0x77, 0xC2, 0x1F, 0x01, 0x00, 0x00, 0xC1,
0x16, 0xB3, 0x77, 0xC2, 0x52, 0x01, 0x00, 0x00, 0xC1, 0x17,
0xB4, 0x77, 0xC2, 0xDB, 0x00, 0x00, 0x00, 0xC1, 0x18, 0xB1,
0x77, 0xC2, 0x19, 0x01, 0x00, 0x00, 0xC1, 0x19, 0xB4, 0x77,
0xC2, 0xD9, 0x00, 0x00, 0x00, 0xC1, 0x1A, 0xB1, 0x77, 0xC2,
0x19, 0x01, 0x00, 0x00, 0xC1, 0x1B, 0xB3, 0x77, 0xC2, 0x55,
0x01, 0x00, 0x00, 0xC1, 0x1C, 0xB2, 0x77, 0xC2, 0x19, 0x00,
0x00, 0x00, 0xC1, 0x1D, 0xB3, 0x77, 0xC2, 0x00, 0x01, 0x00,
0x00, 0xC1, 0x1E, 0xB1, 0x77, 0xC2, 0x4B, 0x01, 0x00, 0x00,
0xC1, 0x1F, 0xB2, 0x77, 0xC2, 0x1E, 0x00, 0x00, 0x00, 0xC1,
0x20, 0x80, 0x02, 0x18, 0x00, 0x00, 0x00, 0x23, 0x10, 0xC1,
0x21, 0x80, 0x02, 0x10, 0x00, 0x00, 0x00, 0x23, 0xF7, 0xC1,
0x22, 0x80, 0x02, 0x08, 0x00, 0x00, 0x00, 0x23, 0xF7, 0xC1,
0x23, 0xF7, 0xFE, 0x80, 0x02, 0x05, 0x00, 0x00, 0x00, 0x22,
0x77, 0x10, 0x80, 0x02, 0x07, 0x00, 0x00, 0x00, 0x23, 0x80,
0x02, 0x23, 0x77, 0xF1, 0x98, 0x31, 0x77, 0x10, 0x80, 0x02,
0x18, 0x00, 0x00, 0x00, 0x23, 0x80, 0x02, 0x20, 0xB9, 0xE4,
0x35, 0x31, 0x77, 0x10, 0x80, 0x02, 0x12, 0x00, 0x00, 0x00,
0x22, 0x77, 0xA0, 0xC1, 0x24, 0x80, 0x02, 0x18, 0x00, 0x00,
0x00, 0x23, 0x10, 0xC1, 0x25, 0x80, 0x02, 0x10, 0x00, 0x00,
0x00, 0x23, 0xF7, 0xC1, 0x26, 0x80, 0x02, 0x08, 0x00, 0x00,
0x00, 0x23, 0xF7, 0xC1, 0x27, 0xF7, 0xFE, 0x32, 0x20, 0x43,
0x33, 0x77, 0x80, 0x02, 0x11, 0x00, 0x00, 0x00, 0x22, 0x35,
0x37, 0x38, 0x77, 0x80, 0x02, 0x0D, 0x00, 0x00, 0x00, 0x23,
0x77, 0x38, 0x39, 0x10, 0x32, 0x20, 0x43, 0x33, 0x77, 0x80,
0x02, 0x11, 0x00, 0x00, 0x00, 0x22, 0x35, 0x37, 0x38, 0x77,
0x80, 0x02, 0x0D, 0x00, 0x00, 0x00, 0x23, 0x77, 0x38, 0x39,
0xC7, 0xC1, 0x28, 0x80, 0x02, 0x18, 0x00, 0x00, 0x00, 0x23,
0x10, 0xC1, 0x29, 0x80, 0x02, 0x10, 0x00, 0x00, 0x00, 0x23,
0xF7, 0xC1, 0x2A, 0x80, 0x02, 0x08, 0x00, 0x00, 0x00, 0x23,
0xF7, 0xC1, 0x2B, 0xF7, 0xFE, 0x32, 0x20, 0x43, 0x33, 0x77,
0x80, 0x02, 0x11, 0x00, 0x00, 0x00, 0x22, 0x35, 0x37, 0x38,
0x77, 0x80, 0x02, 0x0D, 0x00, 0x00, 0x00, 0x23, 0x77, 0x38,
0x39, 0x10, 0x32, 0x20, 0x43, 0x33, 0x77, 0x80, 0x02, 0x11,
0x00, 0x00, 0x00, 0x22, 0x35, 0x37, 0x38, 0x77, 0x80, 0x02,
0x0D, 0x00, 0x00, 0x00, 0x23, 0x77, 0x38, 0x39, 0xC8, 0x99};
int i=0;
while ( 1 )
{
if ( opcode[i] == 0x71 )
{
printf("table[6] -= 4\n");
printf("*table[6] = 0x%x\n",opcode[i+1]);
i += 5;
}
if ( opcode[i] == 0x41 )
{
printf("table[1] += table[2]\n");
++i;
}
if ( opcode[i] == 0x42 )
{
printf("table[1] -= table[4];\n");
++i;
}
if ( opcode[i] == 0x43 )
{
printf("table[1] *= table[3];\n");
++i;
}
if ( opcode[i] == 0x37 )
{
printf("table[1] = table[5];\n");
++i;
}
if ( opcode[i] == 0x38 )
{
printf("table[1] ^= table[4];\n");
++i;
}
if ( opcode[i] == 0x39 )
{
printf("table[1] ^= table[5];\n");
++i;
}
if ( opcode[i] == 0x35 )
{
printf("table[5] = table[1];\n");
++i;
}
if ( opcode[i] == 0xF7 )
{
printf("table[9] += table[1];\n");
++i;
}
if ( opcode[i] == 0x44 )
{
printf("table[1] /= table[5];\n");
++i;
}
if ( opcode[i] == 0x80 )
{
printf("table[2] = 0x%x\n",*((unsigned int*)(&opcode[i+2])));
i += 6;
}
if ( opcode[i] == 0x77 )
{
printf("table[1] ^= table[9];\n");
++i;
}
if ( opcode[i] == 0x53 )
{
printf("(sub_8048580)(*table[3]);\n");
i += 2;
}
if ( opcode[i] == 0x22 )
{
printf("table[1] >>= table[2];\n");
++i;
}
if ( opcode[i] == 0x23 )
{
printf("table[1] <<= table[2];\n");
++i;
}
if ( opcode[i] == 0x99 )
{
printf("out\n");
break;
}
if ( opcode[i] == 0x76 )
{
printf("table[3] = *table[6];\n");
printf("*table[6] = 0;\n");
printf("table[6] += 4;\n");
i += 5;
}
if ( opcode[i] == 0x54 )
{
printf("v6 = table[3];\n");
printf("*v6 = sub_8048520();\n");
i += 2;
}
if ( opcode[i] == 0x30 )
{
printf("table[1] |= table[2];\n");
++i;
}
if ( opcode[i] == 0x31 )
{
printf("table[1] &= table[2];\n");
++i;
}
if ( opcode[i] == 0x32 )
{
printf("table[3] = 0x%x\n",opcode[i+1]) ;
i += 2;
}
if ( opcode[i] == 9 )
{
printf("table[1] = 1877735783;\n");
++i;
}
if ( opcode[i] == 0x10 )
{
printf("table[9] = table[1];\n");
++i;
}
if ( opcode[i] == 0x33 )
{
printf("table[4] = table[1]\n");
++i;
}
if ( opcode[i] == 0x34 )
{
printf("table[2] = 0x%x;",opcode[i+1]);
i += 2;
}
if ( opcode[i] == 0xFE )
{
printf("table[1] = table[9];\n");
++i;
}
if ( opcode[i] == 0x11 )
{
printf("(sub_8048510)(&unk_8049340, table[1])\n");
++i;
}
if ( opcode[i] == 0xA0 )
{
printf("if ( table[1] != 1877735783 )\nexit\n\n");
++i;
}
if ( opcode[i] == 0xA1 )
{
printf("read\n");
++i;
}
if ( opcode[i] == 0xB1 )
{
printf("table[9] = xor[0]\n");
++i;
}
if ( opcode[i] == 0xB2 )
{
printf("table[9] = xor[1];\n");
++i;
}
if ( opcode[i] == 0xA4 )
{
printf("xor[*(table[8] + 1)] = table[1];\n");
i += 4;
}
if ( opcode[i] == 0xB3 )
{
printf("table[9] = xor[2];\n");
++i;
}
if ( opcode[i] == 0xB4 )
{
printf("table[9] = xor[3];\n");
++i;
}
if ( opcode[i] == 0xC1 )
{
printf("table[1] = flag[%d];\n",opcode[i+1]);
i += 2;
}
if ( opcode[i] == 0xC7 )
{
printf("dword_804B060 != table[1]\n\n");
++i;
}
if ( opcode[i] == 0xC8 )
{
printf("dword_804B064 != table[1]\n\n");
++i;
}
if ( opcode[i] == 0xC2 )
{
printf("if ( %d != table[1] )\n\n",opcode[i+1]);
i+= 5;
}
}
}
int main()
{
int opcode[]={ 0xA1, 0xC1, 0x00, 0xB1, 0x77, 0xC2, 0x4A, 0x01, 0x00, 0x00,
0xC1, 0x01, 0xB2, 0x77, 0xC2, 0x19, 0x01, 0x00, 0x00, 0xC1,
0x02, 0xB4, 0x77, 0xC2, 0xDD, 0x01, 0x00, 0x00, 0xC1, 0x03,
0xB3, 0x77, 0xC2, 0x0F, 0x01, 0x00, 0x00, 0xC1, 0x04, 0xB2,
0x77, 0xC2, 0x1B, 0x01, 0x00, 0x00, 0xC1, 0x05, 0xB4, 0x77,
0xC2, 0x89, 0x01, 0x00, 0x00, 0xC1, 0x06, 0xB1, 0x77, 0xC2,
0x19, 0x01, 0x00, 0x00, 0xC1, 0x07, 0xB3, 0x77, 0xC2, 0x54,
0x01, 0x00, 0x00, 0xC1, 0x08, 0xB1, 0x77, 0xC2, 0x4F, 0x01,
0x00, 0x00, 0xC1, 0x09, 0xB1, 0x77, 0xC2, 0x4E, 0x01, 0x00,
0x00, 0xC1, 0x0A, 0xB3, 0x77, 0xC2, 0x55, 0x01, 0x00, 0x00,
0xC1, 0x0B, 0xB3, 0x77, 0xC2, 0x56, 0x01, 0x00, 0x00, 0xC1,
0x0C, 0xB4, 0x77, 0xC2, 0x8E, 0x00, 0x00, 0x00, 0xC1, 0x0D,
0xB2, 0x77, 0xC2, 0x49, 0x00, 0x00, 0x00, 0xC1, 0x0E, 0xB3,
0x77, 0xC2, 0x0E, 0x01, 0x00, 0x00, 0xC1, 0x0F, 0xB1, 0x77,
0xC2, 0x4B, 0x01, 0x00, 0x00, 0xC1, 0x10, 0xB3, 0x77, 0xC2,
0x06, 0x01, 0x00, 0x00, 0xC1, 0x11, 0xB3, 0x77, 0xC2, 0x54,
0x01, 0x00, 0x00, 0xC1, 0x12, 0xB2, 0x77, 0xC2, 0x1A, 0x00,
0x00, 0x00, 0xC1, 0x13, 0xB1, 0x77, 0xC2, 0x42, 0x01, 0x00,
0x00, 0xC1, 0x14, 0xB3, 0x77, 0xC2, 0x53, 0x01, 0x00, 0x00,
0xC1, 0x15, 0xB1, 0x77, 0xC2, 0x1F, 0x01, 0x00, 0x00, 0xC1,
0x16, 0xB3, 0x77, 0xC2, 0x52, 0x01, 0x00, 0x00, 0xC1, 0x17,
0xB4, 0x77, 0xC2, 0xDB, 0x00, 0x00, 0x00, 0xC1, 0x18, 0xB1,
0x77, 0xC2, 0x19, 0x01, 0x00, 0x00, 0xC1, 0x19, 0xB4, 0x77,
0xC2, 0xD9, 0x00, 0x00, 0x00, 0xC1, 0x1A, 0xB1, 0x77, 0xC2,
0x19, 0x01, 0x00, 0x00, 0xC1, 0x1B, 0xB3, 0x77, 0xC2, 0x55,
0x01, 0x00, 0x00, 0xC1, 0x1C, 0xB2, 0x77, 0xC2, 0x19, 0x00,
0x00, 0x00, 0xC1, 0x1D, 0xB3, 0x77, 0xC2, 0x00, 0x01, 0x00,
0x00, 0xC1, 0x1E, 0xB1, 0x77, 0xC2, 0x4B, 0x01, 0x00, 0x00,
0xC1, 0x1F, 0xB2, 0x77, 0xC2, 0x1E, 0x00, 0x00, 0x00, 0xC1,
0x20, 0x80, 0x02, 0x18, 0x00, 0x00, 0x00, 0x23, 0x10, 0xC1,
0x21, 0x80, 0x02, 0x10, 0x00, 0x00, 0x00, 0x23, 0xF7, 0xC1,
0x22, 0x80, 0x02, 0x08, 0x00, 0x00, 0x00, 0x23, 0xF7, 0xC1,
0x23, 0xF7, 0xFE, 0x80, 0x02, 0x05, 0x00, 0x00, 0x00, 0x22,
0x77, 0x10, 0x80, 0x02, 0x07, 0x00, 0x00, 0x00, 0x23, 0x80,
0x02, 0x23, 0x77, 0xF1, 0x98, 0x31, 0x77, 0x10, 0x80, 0x02,
0x18, 0x00, 0x00, 0x00, 0x23, 0x80, 0x02, 0x20, 0xB9, 0xE4,
0x35, 0x31, 0x77, 0x10, 0x80, 0x02, 0x12, 0x00, 0x00, 0x00,
0x22, 0x77, 0xA0, 0xC1, 0x24, 0x80, 0x02, 0x18, 0x00, 0x00,
0x00, 0x23, 0x10, 0xC1, 0x25, 0x80, 0x02, 0x10, 0x00, 0x00,
0x00, 0x23, 0xF7, 0xC1, 0x26, 0x80, 0x02, 0x08, 0x00, 0x00,
0x00, 0x23, 0xF7, 0xC1, 0x27, 0xF7, 0xFE, 0x32, 0x20, 0x43,
0x33, 0x77, 0x80, 0x02, 0x11, 0x00, 0x00, 0x00, 0x22, 0x35,
0x37, 0x38, 0x77, 0x80, 0x02, 0x0D, 0x00, 0x00, 0x00, 0x23,
0x77, 0x38, 0x39, 0x10, 0x32, 0x20, 0x43, 0x33, 0x77, 0x80,
0x02, 0x11, 0x00, 0x00, 0x00, 0x22, 0x35, 0x37, 0x38, 0x77,
0x80, 0x02, 0x0D, 0x00, 0x00, 0x00, 0x23, 0x77, 0x38, 0x39,
0xC7, 0xC1, 0x28, 0x80, 0x02, 0x18, 0x00, 0x00, 0x00, 0x23,
0x10, 0xC1, 0x29, 0x80, 0x02, 0x10, 0x00, 0x00, 0x00, 0x23,
0xF7, 0xC1, 0x2A, 0x80, 0x02, 0x08, 0x00, 0x00, 0x00, 0x23,
0xF7, 0xC1, 0x2B, 0xF7, 0xFE, 0x32, 0x20, 0x43, 0x33, 0x77,
0x80, 0x02, 0x11, 0x00, 0x00, 0x00, 0x22, 0x35, 0x37, 0x38,
0x77, 0x80, 0x02, 0x0D, 0x00, 0x00, 0x00, 0x23, 0x77, 0x38,
0x39, 0x10, 0x32, 0x20, 0x43, 0x33, 0x77, 0x80, 0x02, 0x11,
0x00, 0x00, 0x00, 0x22, 0x35, 0x37, 0x38, 0x77, 0x80, 0x02,
0x0D, 0x00, 0x00, 0x00, 0x23, 0x77, 0x38, 0x39, 0xC8, 0x99};
int i=0;
while ( 1 )
{
if ( opcode[i] == 0x71 )
{
printf("table[6] -= 4\n");
printf("*table[6] = 0x%x\n",opcode[i+1]);
i += 5;
}
if ( opcode[i] == 0x41 )
{
printf("table[1] += table[2]\n");
++i;
}
if ( opcode[i] == 0x42 )
{
printf("table[1] -= table[4];\n");
++i;
}
if ( opcode[i] == 0x43 )
{
printf("table[1] *= table[3];\n");
++i;
}
if ( opcode[i] == 0x37 )
{
printf("table[1] = table[5];\n");
++i;
}
if ( opcode[i] == 0x38 )
{
printf("table[1] ^= table[4];\n");
++i;
}
if ( opcode[i] == 0x39 )
{
printf("table[1] ^= table[5];\n");
++i;
}
if ( opcode[i] == 0x35 )
{
printf("table[5] = table[1];\n");
++i;
}
if ( opcode[i] == 0xF7 )
{
printf("table[9] += table[1];\n");
++i;
}
if ( opcode[i] == 0x44 )
{
printf("table[1] /= table[5];\n");
++i;
}
if ( opcode[i] == 0x80 )
{
printf("table[2] = 0x%x\n",*((unsigned int*)(&opcode[i+2])));
i += 6;
}
if ( opcode[i] == 0x77 )
{
printf("table[1] ^= table[9];\n");
++i;
}
if ( opcode[i] == 0x53 )
{
printf("(sub_8048580)(*table[3]);\n");
i += 2;
}
if ( opcode[i] == 0x22 )
{
printf("table[1] >>= table[2];\n");
++i;
}
if ( opcode[i] == 0x23 )
{
printf("table[1] <<= table[2];\n");
++i;
}
if ( opcode[i] == 0x99 )
{
printf("out\n");
break;
}
if ( opcode[i] == 0x76 )
{
printf("table[3] = *table[6];\n");
printf("*table[6] = 0;\n");
printf("table[6] += 4;\n");
i += 5;
}
if ( opcode[i] == 0x54 )
{
printf("v6 = table[3];\n");
printf("*v6 = sub_8048520();\n");
i += 2;
}
if ( opcode[i] == 0x30 )
{
printf("table[1] |= table[2];\n");
++i;
}
if ( opcode[i] == 0x31 )
{
printf("table[1] &= table[2];\n");
++i;
}
if ( opcode[i] == 0x32 )
{
printf("table[3] = 0x%x\n",opcode[i+1]) ;
i += 2;
}
if ( opcode[i] == 9 )
{
printf("table[1] = 1877735783;\n");
++i;
}
if ( opcode[i] == 0x10 )
{
printf("table[9] = table[1];\n");
++i;
}
if ( opcode[i] == 0x33 )
{
printf("table[4] = table[1]\n");
++i;
}
if ( opcode[i] == 0x34 )
{
printf("table[2] = 0x%x;",opcode[i+1]);
i += 2;
}
if ( opcode[i] == 0xFE )
{
printf("table[1] = table[9];\n");
++i;
}
if ( opcode[i] == 0x11 )
{
printf("(sub_8048510)(&unk_8049340, table[1])\n");
++i;
}
if ( opcode[i] == 0xA0 )
{
printf("if ( table[1] != 1877735783 )\nexit\n\n");
++i;
}
if ( opcode[i] == 0xA1 )
{
printf("read\n");
++i;
}
if ( opcode[i] == 0xB1 )
{
printf("table[9] = xor[0]\n");
++i;
}
if ( opcode[i] == 0xB2 )
{
printf("table[9] = xor[1];\n");
++i;
}
if ( opcode[i] == 0xA4 )
{
printf("xor[*(table[8] + 1)] = table[1];\n");
i += 4;
}
if ( opcode[i] == 0xB3 )
{
printf("table[9] = xor[2];\n");
++i;
}
if ( opcode[i] == 0xB4 )
{
printf("table[9] = xor[3];\n");
++i;
}
if ( opcode[i] == 0xC1 )
{
printf("table[1] = flag[%d];\n",opcode[i+1]);
i += 2;
}
if ( opcode[i] == 0xC7 )
{
printf("dword_804B060 != table[1]\n\n");
++i;
}
if ( opcode[i] == 0xC8 )
{
printf("dword_804B064 != table[1]\n\n");
++i;
}
if ( opcode[i] == 0xC2 )
{
[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!