-
-
[原创]第一题:无限流[签到题] 签个到,怀念一下
-
发表于: 2019-12-1 14:40 2404
-
第一题:无限流[签到题] 签个到,怀念一下
前段时间在论坛要下个工具,关注了公众号,今天中午回到家就看到公众号的推送,回想起以前在论坛学习的日子,真的很怀念,那就来签个到吧。
把签到题下下来就愁了,除了VS好像其它工具都没有,那就VS吧,反正签到题都说了是无敌简单的。
1. 分析目标
目标叫goodluck.exe
,看着都觉得心情不错。
一看图标就是熟悉的MFC写的,VS就直接使用dumpbin.exe
吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | C:\Users\xxx\Desktop\goodluck>dumpbin goodluck.exe / IMPORTS Microsoft (R) COFF / PE Dumper Version 14.16 . 27030.1 ... MSVCRT.dll 40318C Import Address Table 4038C0 Import Name Table 0 time date stamp 0 Index of first forwarder reference 48 _XcptFilter 249 exit 8F _acmdln 58 __getmainargs 10F _initterm 83 __setusermatherr 9D _adjust_fdiv 6A __p__commode 6F __p__fmode 81 __set_app_type CA _except_handler3 B7 _controlfp 186 _onexit 55 __dllonexit 2BE strlen 2B8 strcmp 49 __CxxFrameHandler 1AA _setmbcp D3 _exit ... |
关于字符串相关的函数strlen
,strcmp
, 一看应该关键代码就和这相关了。
2. 调试
运行goodluck.exe
,VS 调试=>附加到进程,然后载入msvcrt.dll
的符号信息,并设置断点:
随便输入123
, 然后断在了strlen
这里,返回到程序代码空间,就看到了关键代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | 040187A 83 C4 04 add esp, 4 0040187D 85 C0 test eax,eax 0040187F 75 13 jne 00401894 00401881 6A 00 push 0 00401883 6A 00 push 0 00401885 68 A8 35 40 00 push 4035A8h 0040188A 8B 4D FC mov ecx,dword ptr [ebp - 4 ] 0040188D E8 20 06 00 00 call 00401EB2 00401892 EB 7B jmp 0040190F 00401894 C7 45 F4 A0 35 40 00 mov dword ptr [ebp - 0Ch ], 4035A0h 0040189B C7 45 F0 00 00 00 00 mov dword ptr [ebp - 10h ], 0 004018A2 C7 45 F0 00 00 00 00 mov dword ptr [ebp - 10h ], 0 004018A9 8B 55 F8 mov edx,dword ptr [ebp - 8 ] 004018AC 03 55 F0 add edx,dword ptr [ebp - 10h ] 004018AF 0F BE 02 movsx eax,byte ptr [edx] 004018B2 85 C0 test eax,eax 004018B4 74 45 je 004018FB 004018B6 8B 4D F8 mov ecx,dword ptr [ebp - 8 ] 004018B9 03 4D F0 add ecx,dword ptr [ebp - 10h ] 004018BC 0F BE 11 movsx edx,byte ptr [ecx] 004018BF 83 FA 39 cmp edx, 39h 004018C2 7F 27 jg 004018EB 004018C4 8B 45 F8 mov eax,dword ptr [ebp - 8 ] 004018C7 03 45 F0 add eax,dword ptr [ebp - 10h ] 004018CA 0F BE 08 movsx ecx,byte ptr [eax] 004018CD 83 F9 30 cmp ecx, 30h 004018D0 7C 19 jl 004018EB 004018D2 8B 55 F8 mov edx,dword ptr [ebp - 8 ] 004018D5 03 55 F0 add edx,dword ptr [ebp - 10h ] 004018D8 0F BE 02 movsx eax,byte ptr [edx] 004018DB 8B 4D F0 mov ecx,dword ptr [ebp - 10h ] 004018DE 8B 55 F4 mov edx,dword ptr [ebp - 0Ch ] 004018E1 8A 44 02 D0 mov al,byte ptr [edx + eax - 30h ] 004018E5 88 44 0D E8 mov byte ptr [ebp + ecx - 18h ],al 004018E9 EB 05 jmp 004018F0 004018EB E8 C0 FE FF FF call 004017B0 004018F0 8B 4D F0 mov ecx,dword ptr [ebp - 10h ] 004018F3 83 C1 01 add ecx, 1 004018F6 89 4D F0 mov dword ptr [ebp - 10h ],ecx 004018F9 EB AE jmp 004018A9 004018FB 8B 55 F0 mov edx,dword ptr [ebp - 10h ] 004018FE C6 44 15 E8 00 mov byte ptr [ebp + edx - 18h ], 0 00401903 8D 45 E8 lea eax,[ebp - 18h ] 00401906 50 push eax 00401907 E8 E4 FE FF FF call 004017F0 0040190C 83 C4 04 add esp, 4 0040190F 5F pop edi 00401910 5E pop esi 00401911 5B pop ebx 00401912 8B E5 mov esp,ebp 00401914 5D pop ebp 00401915 C3 ret |
大概算法就是计算'cuk!ogl'对应'0123456' 排序成'goluck!'后对应的数字:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | / * 转成C代码算法大概这样,没运行过 - _ - ! * / int encript(char * input , char * output, int output_len) { const char * factor = "cuk!ogl" ; if (! input || !output) { return - 1 ; } int input_len = strlen( input ); int i = 0 ; for (i = 0 ; i < input_len && i < output_len; i + + ) { if ( input [i] > '9' || input [i] < '0' ) { return - 1 ; } output[i] = factor[i]; } output[i] = '\0' ; } |
就这样简单的签到成功了,后面估计就与我无缘了
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
赞赏
雪币:
留言: