首页 > 代码库 > ISCC2014-reverse

ISCC2014-reverse

这是我做reverse的题解,在咱逆向之路上的mark一下,,水平有限,大牛见笑。

 

题目及题解链接:http://pan.baidu.com/s/1gd3k2RL

宗女齐姜

果然是只有50分的难度,OD直接找到了flag.

 

找到杀手

这题用OD做很麻烦,我改用IDA了,又是秒破

将图中字符串输入,程序生成了四张扑克牌图片,题目让根据密文推断,就4个字符串,一个一个试最多4次就出来了,哈哈

 

 

避难母国

这题挺有意思的,总共要经过13次听取建议,太麻烦,在第一次是Andy后,以后都用改变寄存器状态的方式跳过剩下的环节,最后程序打印出flag。

 

流亡齐国

用不成OD了,用Reflector得到关键函数的源码

可是我不会C#啊,找到精通C#的同学得到解密函数,并取得了flag.

 

 

 

 

何去何从

这题貌似简单,其实就是简单,当然做出来了就感觉简单,其实有一个陷阱,只要发现了就OK了。

这道题很有诱惑性,按正常的思路很快就得到了一个flag-like的家伙。

是vc 6.0的程序,很容易就找到了main函数

进入后

其中的注释是全部做完后的注释,第一遍时很正常的跳过了其中注释为“不能调”、“这才是关键”的那部分代码,进入了注释为“关键进入”的函数,

 

 

这个函数首先经过0x13次的循环生成“(3q^;^3lfjq&D7V4Hhd”,然后与输入的字符串比较,相等则显示“是这个么”,不等则显示“错了”,似乎flag已经找到了,真对不起200分的价值是不是?,可是提交时却发现不正确,难道要对这个字符串做什么变换么?只能回去再仔细看看程序了。

又到了这一步,按程序的意思是,jnz是一定会跳的,但是里边的两个函数有什么用呢,于是决定进去看看,强制改了跳转,F8跳过第二个函数后,程序打印出

,于是进去看看。

到了这一步,

再跟进去瞧瞧,

这和之前生成的那个0x13长的伪flag的生成算法是一样的,运行完后在内存中找到这个字符串“(3q&vf2vw%f7Vj9Ookj”,这个就是FLAG了!


逃离临淄

 

运行程序如图

在程序函数中找到了GetWindowTextA函数,下断点,

在编辑框中随便输入点东西后点“注册”,到断点

调用两次这个函数,得到注册名和注册码,存在0x18CD98和0x18CDB8处

在下图这个函数中会对注册码进行变形

进入后

004016C0  /$ 8B5424 04     mov edx,dword ptrss:[esp+0x4]

004016C4  |. 57            push edi

004016C5  |. 8BFA          mov edi,edx

004016C7  |. 83C9 FF       or ecx,0xFFFFFFFF

004016CA  |. 33C0          xor eax,eax

004016CC  |. F2:AE         repne scas byte ptres:[edi]

004016CE  |. F7D1          not ecx

004016D0  |. 49            dec ecx

004016D1  |. 83F9 1F       cmp ecx,0x1F                 判断长度是否为0x1f

004016D4  |.  7406         je XCrackMe?004016DC

004016D6  |. 32C0          xor al,al

004016D8  |. 5F            pop edi

004016D9  |.  C20800       retn 0x8

004016DC  |> 8B4424 0C     mov eax,dword ptrss:[esp+0xC]

004016E0  |. 53            push ebx

004016E1  |. 56            push esi

004016E2  |. 8BF2          mov esi,edx

004016E4  |. 8BC8          mov ecx,eax

004016E6  |. 2BF0          sub esi,eax

004016E8  |.  BF1F000000   mov edi,0x1F

004016ED  |> 8A040E        /mov al,byte ptrds:[esi+ecx]

004016F0  |.  3C30         |cmp al,0x30

004016F2  |.  7C17         |jl XCrackMe?0040170B

004016F4  |.  3C39         |cmp al,0x39

004016F6  |.  7F13         |jg XCrackMe?0040170B

004016F8  |. 0FBEC0        |movsx eax,al

004016FB  |. 83E8 2B       |sub eax,0x2B

004016FE  |.  BB0A000000   |mov ebx,0xA

00401703  |.  99            |cdq

00401704  |. F7FB          |idiv ebx

00401706  |. 80C2 30       |add dl,0x30

00401709  |.  EB34         |jmp XCrackMe?0040173F         (数字-2B)/ A 取余

0040170B  |> 3C 41         |cmp al,0x41

0040170D  |.  7C17         |jl XCrackMe?00401726

0040170F  |.  3C5A         |cmp al,0x5A

00401711  |.  7F13         |jg XCrackMe?00401726

00401713  |. 0FBEC0        |movsx eax,al

00401716  |. 83E8 34       |sub eax,0x34

00401719  |.  BB1A000000   |mov ebx,0x1A

0040171E  |. 99            |cdq

0040171F  |. F7FB          |idiv ebx

00401721  |. 80C2 41       |add dl,0x41

00401724  |.  EB19         |jmp XCrackMe?0040173F         (大写-0x34) / 1A 取余

00401726  |> 3C 61         |cmp al,0x61

00401728  |.  7C17         |jl XCrackMe?00401741

0040172A  |.  3C7A         |cmp al,0x7A

0040172C  |.  7F13         |jg XCrackMe?00401741

0040172E  |. 0FBEC0        |movsx eax,al

00401731  |. 83E8 54       |sub eax,0x54

00401734  |.  BB1A000000   |mov ebx,0x1A

00401739  |. 99            |cdq

0040173A  |.  F7FB          |idiv ebx

0040173C  |. 80C2 61       |add dl,0x61                 (小写-0x54) / 1A 取余

0040173F  |> 8AC2          |mov al,dl

00401741  |> 8801          |mov byte ptrds:[ecx],al

00401743  |. 41            |inc ecx

00401744  |. 4F            |dec edi

00401745  |.^ 75 A6         \jnz XCrackMe?004016ED

00401747  |. 5E            pop esi

00401748  |. 5B            pop ebx

00401749  |.  B001         mov al,0x1

0040174B  |. 5F            pop edi

0040174C  \.  C20800       retn 0x8

跳出这个函数后

以下都是对变形后的字符串进行的判断。

判断了三位。

再然后

是对后十位的比较,将后十位变成整形后与EDI比较,edi由下图函数得到

 

 

 

还好这个结果与后十位的内容无关。

 

当一切判定条件都通过后,就来到最后弹出对话框的地方。

 

 

这个注册码vscc11-695356-695356-6494939865是2014年8月1日过期

这个注册码是2015年八月1日到期  vscc11-695356-605356-6456326018

 

 咱现在的逆向水平也就只能做到这了,剩下的题希望能从大牛那里得到经验,也算从这次比赛得到的最大收获了。