前言:
坛友们,年轻就是资本,和我一起逆天改命吧,我的学习过程全部记录及学习资源:https://www.52pojie.cn/thread-1791705-1-1.html
立帖为证!--------记录学习的点点滴滴
0x1 清理环境
1.stduy PE看看程序基本信息

2.从上图可以看到是无壳VC程序,动态地址,为了方便等会调试的时候和IDA对比,我们点一下固定PE地址,保存
3.丢进OD,可以看到基本固定下来了,右键搜索中文字符串,可以看到可疑字符串,但是没有正确or错误的提示字符串信息,那就用IDA看看。
0042BA48=【2025春.0042BA48 (ASCII "6b83537e8a30477b3e59362e4c293535340c5b5a5c797f5073747e")

0x2 IDA静态分析
1.丢进IDA,view->String显示一下字符串,找到了不少可疑字符串,hint提示我们注意6b83537e8a30477b3e59362e4c293535340c5b5a5c797f5073747e这个字符串的变换,记下这个数据的地址。
rdata:0042BA48 36 62 38 33 35 33 37 65 38 61+a6b83537e8a3047 db

2.再来试试F5大法,反编译后的伪代码看的云里雾里,找不到关键点。
3.再去看看流程图,可以看到只有走到4025E3才是正确的。

0x3 动静结合分析
1.打开OD去数据窗口跟踪一下那个可疑字符串,看看一会怎么与他进行运算的

2.去下断点,首先下载请输入XXX的这个地方,因为不管是成功还是失败都要与我们输入的字符串比较才能得出结论,断在这里可以保证能执行到,然后开始单步调试,输入123456789继续往下走,看到jb short 【2025春.00402425一个跳转,再看一下跳下来之后的位置,妥妥的失败提示语啊,这里可能是判断字符串长度,我们试试输入16个1再来。
004023B6 |. BA A4BA4200 mov edx,【2025春.0042BAA4
004023BB |. C645 FC 07 mov byte ptr ss:[ebp-0x4],0x7
004023BF |. E8 9C140000 call 【2025春.00403860
004023C4 |. 50 push eax
004023C5 |. E8 46170000 call 【2025春.00403B10
004023CA |. 83C4 04 add esp,0x4
004023CD |. 8D55 D8 lea edx,[local.10]
004023D0 |. B9 C8004300 mov ecx,【2025春.004300C8
004023D5 |. E8 661C0000 call 【2025春.00404040
004023DA |. 8D55 90 lea edx,[local.28]
004023DD |. 8D8D 54FFFFFF lea ecx,[local.43]
004023E3 |. E8 88FAFFFF call 【2025春.00401E70
004023E8 |. 8B95 68FFFFFF mov edx,[local.38]
004023EE |. 8B78 10 mov edi,dword ptr ds:[eax+0x10]
004023F1 |. 83FA 10 cmp edx,0x10
004023F4 |. 72 2F jb short 【2025春.00402425
00402425 |> \8B75 E8 mov esi,[local.6]
00402428 |. 3BF7 cmp esi,edi
0040242A |. 8B7D D8 mov edi,[local.10]
0040242D |. 74 22 je short 【2025春.00402451
0040242F |. BA BCBA4200 mov edx,【2025春.0042BABC
3.经过多番试探,发现不是判断长度,反复换不同的字符就是过不了第一个跳转,分析不出来强行改跳转吧,然后到了这里反复循环。
004024D0 |> /69C2 6D4EC641 /imul eax,edx,0x41C64E6D
004024D6 |. |8D49 01 |lea ecx,dword ptr ds:[ecx+0x1]
004024D9 |. |47 |inc edi
004024DA |. |05 40E20100 |add eax,0x1E240
004024DF |. |99 |cdq
004024E0 |. |F7BD 70FFFFFF |idiv [local.36]
004024E6 |. |B8 4FECC44E |mov eax,0x4EC4EC4F
004024EB |. |8995 6CFFFFFF |mov [local.37],edx
004024F1 |. |F7EA |imul edx
004024F3 |. |C1FA 03 |sar edx,0x3
004024F6 |. |8BC2 |mov eax,edx
004024F8 |. |C1E8 1F |shr eax,0x1F
004024FB |. |03C2 |add eax,edx
004024FD |. |8B95 6CFFFFFF |mov edx,[local.37]
00402503 |. |0FBEC0 |movsx eax,al
00402506 |. |6BC0 1A |imul eax,eax,0x1A
00402509 |. |2AC2 |sub al,dl
0040250B |. |0041 FF |add byte ptr ds:[ecx-0x1],al
0040250E |. |3BFE |cmp edi,esi
00402510 |.^\75 BE \jnz short 【2025春.004024D0
4.跳过去继续单步调试,走着走着,意外出现了,看看寄存器窗口出现了疑似flag的字符串。

5.接着走,可以看到ecx就是可疑字符串,edx就是我随便输入的内容,esi是我输入字符串的长度,local.12是0x1B,就是27,也就是说我们输入的字符串长度要为27位,才会进入下一个循环,否则jnz就直接跳向4025EC失败了,再来数数可疑字符串的位数正是27位。
00402578 |. 0F434D C0 cmovnb ecx,[local.16]
0040257C |. 8D55 D8 lea edx,[local.10]
0040257F |. 837D EC 10 cmp [local.5],0x10
00402583 |. C685 54FFFFFF>mov byte ptr ss:[ebp-0xAC],0x0
0040258A |. 0F43D7 cmovnb edx,edi
0040258D |. 3B75 D0 cmp esi,[local.12]
00402590 |. 75 5A jnz short 【2025春.004025EC
00402592 |. 83EE 04 sub esi,0x4
00402595 |. 72 11 jb short 【2025春.004025A8
004025EC |> \BA FCBA4200 mov edx,【2025春.0042BAFC
004025F1 |> E8 6A120000 call 【2025春.00403860
6.重新启动程序,输入fl@g{52pOj1E_2025#Fighting}跑一遍,验证通过了。

0x4 总结
1.作为菜鸟的思路,反正就是先找字符串,搜字符串,看到可疑字符串多定位数据窗口。
2.看不懂的代码猜,猜不出来就去爆破硬改,看到跳转就往后拉,看看是不是跳向失败了,改掉后多观察,一般成功和失败之前都是关键判断和比较。
3.今年不行了,只做出了这题,还得继续学习,有一段时间没上论坛了,上面优秀的教程越来越多了。