160 - 32 genocide1

环境
Windows xp sp3

工具
upx
exeinfope
ollydbg

查壳

发现是upx壳,手脱的话会不干净,影响OD分析。
所以就直接用 upx -d 脱了

手脱:

upx -d:

用upx -d 脱的版本进行分析。
第一次运行时显示这个:

缺少Reg.dat,所以无法打开。那就新建一个Reg.dat。

找到注册窗口:

估计是要serial正确的时候OK按钮才能点击。

OD载入:
直接搜字符串看看有没有什么有价值的

00437B33      00            db 00
00437B34      FC7D4300      dd crackme_.00437DFC
00437B38   .  0C            db 0C
00437B39   .  42 75 74 74 6>ascii "Button2Click"
00437B45      12            db 12
00437B46      00            db 00
00437B47      707E4300      dd crackme_.00437E70                             ;  这里是处理Edit1Change事件的函数,下面的也是同一个道理
00437B4B   .  0B            db 0B
00437B4C   .  45 64 69 74 3>ascii "Edit1Change"
00437B57      12            db 12
00437B58      00            db 00
00437B59      7C7E4300      dd crackme_.00437E7C
00437B5D   .  0B            db 0B
00437B5E   .  45 64 69 74 3>ascii "Edit2Change"
00437B69      12            db 12
00437B6A      00            db 00
00437B6B      887E4300      dd crackme_.00437E88
00437B6F   .  0B            db 0B
00437B70   .  45 64 69 74 3>ascii "Edit3Change"
00437B7B      12            db 12
00437B7C      00            db 00
00437B7D      947E4300      dd crackme_.00437E94
00437B81   .  0B            db 0B
00437B82   .  45 64 69 74 3>ascii "Edit4Change"
00437B8D      13            db 13
00437B8E      00            db 00
00437B8F      A07E4300      dd crackme_.00437EA0
00437B93   .  0C            db 0C
00437B94   .  42 75 74 74 6>ascii "Button1Click"
00437BA0   .  06            db 06
00437BA1   .  54 46 6F 72 6>ascii "TForm2"

至于为什么会找到这里,可以查看Button1Click的函数。

00437E70   .  B8 01000000   mov eax,0x1                                      ;  这里是Edit1Change的函数
00437E75   .  E8 A2FEFFFF   call crackme_.00437D1C
00437E7A   .  C3            retn
00437E7B      90            nop
00437E7C   .  B8 02000000   mov eax,0x2
00437E81   .  E8 96FEFFFF   call crackme_.00437D1C
00437E86   .  C3            retn
00437E87      90            nop
00437E88   .  B8 03000000   mov eax,0x3
00437E8D   .  E8 8AFEFFFF   call crackme_.00437D1C
00437E92   .  C3            retn
00437E93      90            nop
00437E94   .  B8 04000000   mov eax,0x4
00437E99   .  E8 7EFEFFFF   call crackme_.00437D1C
00437E9E   .  C3            retn
00437E9F      90            nop                                              ;  下面开始是Button1Click的函数
00437EA0   .  6A 00         push 0x0                                         ; /Style = MB_OK|MB_APPLMODAL
00437EA2   .  68 B47E4300   push crackme_.00437EB4                           ; |Title = "Success!"
00437EA7   .  68 C07E4300   push crackme_.00437EC0                           ; |Text = "Hey, Man, you did it!
You cracked my little proggie.
AAAAH! :("
00437EAC   .  6A 00         push 0x0                                         ; |hOwner = NULL
00437EAE   .  E8 31DBFCFF   call <jmp.&user32.MessageBoxA>                   ; \MessageBoxA
00437EB3   .  C3            retn

在[00437E70][00437E7C][00437E88][00437E94]都下个断点,改变serial的时候发现断了下来
在下面的call跟进去

00437D1C  /$  55            push ebp
00437D1D  |.  8BEC          mov ebp,esp
00437D1F  |.  6A 00         push 0x0
00437D21  |.  53            push ebx
00437D22  |.  8BD8          mov ebx,eax
00437D24  |.  33C0          xor eax,eax
00437D26  |.  55            push ebp
00437D27  |.  68 EE7D4300   push crackme_.00437DEE
00437D2C  |.  64:FF30       push dword ptr fs:[eax]
00437D2F  |.  64:8920       mov dword ptr fs:[eax],esp
00437D32  |.  8BC3          mov eax,ebx
00437D34  |.  48            dec eax                                          ;  Switch (cases 1..4)
00437D35  |.  74 0E         je Xcrackme_.00437D45
00437D37  |.  48            dec eax
00437D38  |.  74 2F         je Xcrackme_.00437D69
00437D3A  |.  48            dec eax
00437D3B  |.  74 50         je Xcrackme_.00437D8D
00437D3D  |.  48            dec eax
00437D3E  |.  74 71         je Xcrackme_.00437DB1
00437D40  |.  E9 8E000000   jmp crackme_.00437DD3
00437D45  |>  8D55 FC       lea edx,[local.1]                                ;  Case 1 of switch 00437D34
00437D48  |.  A1 28A74300   mov eax,dword ptr ds:[0x43A728]
00437D4D  |.  8B80 E8010000 mov eax,dword ptr ds:[eax+0x1E8]
00437D53  |.  E8 6854FEFF   call crackme_.0041D1C0
00437D58  |.  8B45 FC       mov eax,[local.1]
00437D5B  |.  E8 D0EBFCFF   call crackme_.00406930
00437D60  |.  89049D 38A743>mov dword ptr ds:[ebx*4+0x43A738],eax
00437D67  |.  EB 6A         jmp Xcrackme_.00437DD3
00437D69  |>  8D55 FC       lea edx,[local.1]                                ;  Case 2 of switch 00437D34
00437D6C  |.  A1 28A74300   mov eax,dword ptr ds:[0x43A728]
00437D71  |.  8B80 EC010000 mov eax,dword ptr ds:[eax+0x1EC]
00437D77  |.  E8 4454FEFF   call crackme_.0041D1C0
00437D7C  |.  8B45 FC       mov eax,[local.1]
00437D7F  |.  E8 ACEBFCFF   call crackme_.00406930
00437D84  |.  89049D 38A743>mov dword ptr ds:[ebx*4+0x43A738],eax
00437D8B  |.  EB 46         jmp Xcrackme_.00437DD3
00437D8D  |>  8D55 FC       lea edx,[local.1]                                ;  Case 3 of switch 00437D34
00437D90  |.  A1 28A74300   mov eax,dword ptr ds:[0x43A728]
00437D95  |.  8B80 F0010000 mov eax,dword ptr ds:[eax+0x1F0]
00437D9B  |.  E8 2054FEFF   call crackme_.0041D1C0
00437DA0  |.  8B45 FC       mov eax,[local.1]
00437DA3  |.  E8 88EBFCFF   call crackme_.00406930
00437DA8  |.  89049D 38A743>mov dword ptr ds:[ebx*4+0x43A738],eax
00437DAF  |.  EB 22         jmp Xcrackme_.00437DD3
00437DB1  |>  8D55 FC       lea edx,[local.1]                                ;  Case 4 of switch 00437D34
00437DB4  |.  A1 28A74300   mov eax,dword ptr ds:[0x43A728]
00437DB9  |.  8B80 F4010000 mov eax,dword ptr ds:[eax+0x1F4]
00437DBF  |.  E8 FC53FEFF   call crackme_.0041D1C0
00437DC4  |.  8B45 FC       mov eax,[local.1]
00437DC7  |.  E8 64EBFCFF   call crackme_.00406930
00437DCC  |.  89049D 38A743>mov dword ptr ds:[ebx*4+0x43A738],eax
00437DD3  |>  E8 00FEFFFF   call crackme_.00437BD8                           ;  Default case of switch 00437D34
00437DD8  |.  33C0          xor eax,eax
00437DDA  |.  5A            pop edx
00437DDB  |.  59            pop ecx
00437DDC  |.  59            pop ecx
00437DDD  |.  64:8910       mov dword ptr fs:[eax],edx
00437DE0  |.  68 F57D4300   push crackme_.00437DF5
00437DE5  |>  8D45 FC       lea eax,[local.1]
00437DE8  |.  E8 0FB9FCFF   call crackme_.004036FC
00437DED  \.  C3            retn

在[00437DD3]位置的call再跟进去,发现是这里比较。

00437BD8  /$  55            push ebp
00437BD9  |.  8BEC          mov ebp,esp
00437BDB  |.  6A 00         push 0x0
00437BDD  |.  6A 00         push 0x0
00437BDF  |.  53            push ebx
00437BE0  |.  56            push esi
00437BE1  |.  33C0          xor eax,eax
00437BE3  |.  55            push ebp
00437BE4  |.  68 0C7D4300   push crackme_.00437D0C
00437BE9  |.  64:FF30       push dword ptr fs:[eax]
00437BEC  |.  64:8920       mov dword ptr fs:[eax],esp
00437BEF  |.  8D55 FC       lea edx,[local.1]
00437BF2  |.  A1 28A74300   mov eax,dword ptr ds:[0x43A728]
00437BF7  |.  8B80 0C020000 mov eax,dword ptr ds:[eax+0x20C]
00437BFD  |.  E8 BE55FEFF   call crackme_.0041D1C0
00437C02  |.  8B45 FC       mov eax,[local.1]
00437C05  |.  E8 6EBDFCFF   call crackme_.00403978
00437C0A  |.  83F8 05       cmp eax,0x5                                      ;  这里是比较输入的name的长度
00437C0D  |.  0F8C AF000000 jl crackme_.00437CC2
00437C13  |.  8B45 FC       mov eax,[local.1]                                ;  下面是取name特定位置上的字符进行运算
00437C16  |.  0FB600        movzx eax,byte ptr ds:[eax]
00437C19  |.  B9 0A000000   mov ecx,0xA
00437C1E  |.  99            cdq
00437C1F  |.  F7F9          idiv ecx                                         ;  第一个字符 / 0xA
00437C21  |.  A3 2CA74300   mov dword ptr ds:[0x43A72C],eax
00437C26  |.  8B45 FC       mov eax,[local.1]
00437C29  |.  0FB640 02     movzx eax,byte ptr ds:[eax+0x2]
00437C2D  |.  B9 0A000000   mov ecx,0xA
00437C32  |.  99            cdq
00437C33  |.  F7F9          idiv ecx                                         ;  第三个字符 / 0xA
00437C35  |.  A3 30A74300   mov dword ptr ds:[0x43A730],eax
00437C3A  |.  8B45 FC       mov eax,[local.1]
00437C3D  |.  0FB640 03     movzx eax,byte ptr ds:[eax+0x3]
00437C41  |.  B9 0A000000   mov ecx,0xA
00437C46  |.  99            cdq
00437C47  |.  F7F9          idiv ecx                                         ;  第四个字符 / 0xA
00437C49  |.  A3 34A74300   mov dword ptr ds:[0x43A734],eax
00437C4E  |.  8B45 FC       mov eax,[local.1]
00437C51  |.  0FB640 04     movzx eax,byte ptr ds:[eax+0x4]
00437C55  |.  B9 0A000000   mov ecx,0xA
00437C5A  |.  99            cdq
00437C5B  |.  F7F9          idiv ecx                                         ;  第五个字符 / 0xA
00437C5D  |.  A3 38A74300   mov dword ptr ds:[0x43A738],eax
00437C62  |.  BE 01000000   mov esi,0x1
00437C67  |.  BB 2CA74300   mov ebx,crackme_.0043A72C
00437C6C  |>  8D55 F8       /lea edx,[local.2]                               ;  这里是将上面的商的结果取出来,如果大于等于10的都要再除0xA
00437C6F  |.  8B03          |mov eax,dword ptr ds:[ebx]
00437C71  |.  E8 8AECFCFF   |call crackme_.00406900
00437C76  |.  8B45 F8       |mov eax,[local.2]
00437C79  |.  E8 FABCFCFF   |call crackme_.00403978
00437C7E  |.  48            |dec eax
00437C7F  |.  74 0C         |je Xcrackme_.00437C8D
00437C81  |.  8B03          |mov eax,dword ptr ds:[ebx]
00437C83  |.  B9 0A000000   |mov ecx,0xA
00437C88  |.  99            |cdq
00437C89  |.  F7F9          |idiv ecx
00437C8B  |.  8903          |mov dword ptr ds:[ebx],eax
00437C8D  |>  46            |inc esi
00437C8E  |.  83C3 04       |add ebx,0x4
00437C91  |.  83FE 05       |cmp esi,0x5
00437C94  |.^ 75 D6         \jnz Xcrackme_.00437C6C
00437C96  |.  BE 01000000   mov esi,0x1
00437C9B  |.  B8 2CA74300   mov eax,crackme_.0043A72C
00437CA0  |.  BA 3CA74300   mov edx,crackme_.0043A73C
00437CA5  |>  8B0A          /mov ecx,dword ptr ds:[edx]                      ;  这里是将输入的serial与上面的计算结果比较
00437CA7  |.  3B08          |cmp ecx,dword ptr ds:[eax]
00437CA9  |.  74 07         |je Xcrackme_.00437CB2                           ;  如果比较结果不同,就会跳出循环
00437CAB  |.  B9 01000000   |mov ecx,0x1
00437CB0  |.  EB 15         |jmp Xcrackme_.00437CC7
00437CB2  |>  33C9          |xor ecx,ecx
00437CB4  |.  46            |inc esi
00437CB5  |.  83C2 04       |add edx,0x4
00437CB8  |.  83C0 04       |add eax,0x4
00437CBB  |.  83FE 05       |cmp esi,0x5
00437CBE  |.^ 75 E5         \jnz Xcrackme_.00437CA5
00437CC0  |.  EB 05         jmp Xcrackme_.00437CC7                           ;  如果比较内容完全一样,就会来到这里
00437CC2  |>  B9 01000000   mov ecx,0x1
00437CC7  |>  85C9          test ecx,ecx
00437CC9  |.  75 14         jnz Xcrackme_.00437CDF
00437CCB  |.  A1 28A74300   mov eax,dword ptr ds:[0x43A728]
00437CD0  |.  8B80 E0010000 mov eax,dword ptr ds:[eax+0x1E0]
00437CD6  |.  B2 01         mov dl,0x1
00437CD8  |.  E8 7B54FEFF   call crackme_.0041D158                           ;  猜测这个是用来使得OK按钮Enable的,前提是调用前dl为1
00437CDD  |.  EB 12         jmp Xcrackme_.00437CF1                           ;  否则还是disable
00437CDF  |>  A1 28A74300   mov eax,dword ptr ds:[0x43A728]
00437CE4  |.  8B80 E0010000 mov eax,dword ptr ds:[eax+0x1E0]
00437CEA  |.  33D2          xor edx,edx
00437CEC  |.  E8 6754FEFF   call crackme_.0041D158
00437CF1  |>  33C0          xor eax,eax
00437CF3  |.  5A            pop edx
00437CF4  |.  59            pop ecx
00437CF5  |.  59            pop ecx
00437CF6  |.  64:8910       mov dword ptr fs:[eax],edx
00437CF9  |.  68 137D4300   push crackme_.00437D13
00437CFE  |>  8D45 F8       lea eax,[local.2]
00437D01  |.  BA 02000000   mov edx,0x2
00437D06  |.  E8 15BAFCFF   call crackme_.00403720
00437D0B  \.  C3            retn

通过上面的分析,可以简单了解到,程序只是简单的将输入的name的第1、3、4、5 共4个位置上的ascii的值的第一位取出来(10进制上的),即最大的位上的值。所以12345的对应的ascii的值为
name:12345
ascii:49 50 51 52 53
serial:4 5 5 5 5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vector function trmplate

/*vectorfunction templateprogrammer:qpz */ #include <iostream> #include <vector> #define MAX 10 using namespace std; class Myclass{ private:vector <int> vel;//可均分的动态数组 public:void Add(int x){vel.push_back(x);}void print(); }; void…

软件工程个人项目11061180王宇杰

&#xff08;1&#xff09;我完全不知道要花费多少时间&#xff0c;因为从来没有进行过类似的项目&#xff0c;涉及的很多问题我以前也根本不会。简单的估计一下&#xff0c;这至少是15小时的工作量。 &#xff08;2&#xff09;前期的准备工作很耗时间&#xff0c;因为一开始根…

160 - 33 Cruehead.1

环境 windows xp sp3 工具 exeinfo pe ollydbg 查壳 无壳的汇编程序&#xff08;OD载入的出来的&#xff09; 测试 当name输入为数字时&#xff0c;会弹出两次错误框。 OD载入搜字符串&#xff0c;发现有两个地方&#xff1a; 0040134D /$ 6A 30 push 0x…

mac osx 10.10 pip 安装问题

在mac osx 升级到 10.10(Yosemite)以后&#xff0c;用pip以及easy_install 安装python包的时候&#xff0c;如果包需要编译&#xff0c;就会编译失败&#xff0c;错误如下&#xff1a; build/temp.macosx-10.10-x86_64-2.7/greenlet.o -o build/lib.macosx-10.10-x86_64-2.7/gr…

英文系统上网页内容乱码的解决

今天随便写了一段html 代码示例&#xff0c;代码如下&#xff1a; <html lang"zh-cn"> <head> </head> <body> <h1>HTML 教程目录</h1> <ul> <li><a href"#C1">第一章</a></li> <li…

160 - 34 Cruehead.3

环境 windows xp sp3 工具 1.exeinfo pe 2.ollydbg 3.WinHex 查壳 和上一个一样&#xff0c;OD载入判断出 测试 运行后发现是没有任何提示&#xff0c;而且没有输入serial的窗口&#xff0c;通过任务管理器可以看出程序的名称写有“Uncracked”&#xff0c;可以猜测…

sed awk tr等文本处理命令

指定行范围替换&#xff1a; sed -i "520,950s/\(.*\)\(HOST_CMD_.*\)\(,\)/\1{ \2, \"\2\" },/g" hostCmdMacro.h linux shell sed命令与转义字符 A“2013/06/09“ sed “s#hello#$A#" sed 指定行范围匹配 删除文本中的重复行(sortuniq/awk/sed) 263…

160 - 35 cupofcoffe.1

环境 Windows xp sp3 工具 1.exeinfo PE 2.ollydbg 查壳 OD载入后可以看出是VB程序 测试 输入&#xff1a;12345678 显示的内容发生了改变&#xff0c;也不影响查找字符串。 004FEC14 > \8B4D E8 mov ecx,dword ptr ss:[ebp-0x18] 004FEC17 . 51 …

centos7 安装mysql

http://my.oschina.net/u/919612/blog/310533 测试可用 随后又想到了&#xff0c;做个iso镜像&#xff0c;然后挂载在CDrom上&#xff0c;然后安装JDK成功&#xff0c;但是mysql安装失败&#xff0c;可能由于只从官网上下载了server&#xff0c;而没有解决依赖关系。 最后&…

ecshop后台增加模板页的方法

CShop的动态模板机制是一个非常灵活的系统,管理员可以在后台根据自己的要求调整模板模块的显示位置。本文详细讲解了如何修改ECSHOP内部结构使得用户可以添加自己的模板页从而方便灵活的使用系统自带的模板系统和广告位系统。 如下图所示 可以看到ECShop支持设置的模板一共如上…

160 - 36 cupofcoffe.2

环境 Winows xp sp3 工具 1.exeinfo PE 2.ollydbg 查壳 OD载入后看出是VB程序 测试 输入&#xff1a;12345678 继续OD搜字符串&#xff1a; 00521688 . 68 60054500 push cupofcof.00450560 ; UNICODE ".........." 0052168D …

使用VS2010 + VirtualDDK 调试驱动

总的说来比 WINDBG要简单的多 可以看到详细的调试内容 但是好像不知道怎么弄成一般的工程 待定今天玩了一下 感觉还是有点麻烦 网站&#xff1a; http://techird.blog.163.com/blog/static/1215640362011112385241568/ 转载于:https://www.cnblogs.com/zcc1414/p/3982457.html…

160 - 37 CyberBlade.1

环境 Windows xp sp3 工具 1.exeinfo PE 2.ollydbg 查壳 OD载入是VB程序。 测试 OD载入直接搜字符串。 这个是当输入为空时会弹出消息框告诉你要输入9个字符。 0040E005 > \8B4D E4 mov ecx,dword ptr ss:[ebp-0x1C] 0040E008 . 51 push…

恢复回收站里一篇文章 --我的实习生涯

今天想恢复我回收站里的一篇日志竟然没这功能&#xff0c;无奈只好ctrlv出来了。半年前的文章&#xff0c;现在已经就业了&#xff0c;工作挺开心的。。。原文如下: 今天是年前的最后一个周6&#xff0c;公司的SVN掉了&#xff0c;我就卖卖呆在CSDN上瞎转转&#xff0c;也写写…

Score Inflation USACO 3.1

完全背包足以,参照完全背包最优解就过了 /*ID: hubiao cavePROG: inflateLANG: C*/#include<iostream>#include<fstream> #include<cstring> #include<string>using namespace std;int main(){ifstream fin("inflate.in");ofstream fout(&qu…

160 - 38 CyberBlade.2

环境 Windows xp sp3 工具 1.VBExplorer 2.ollydbg 查壳 OD载入往上翻可以看出是vb程序&#xff0c;看到 00401042 .- FF25 60104100 jmp dword ptr ds:[<&MSVBVM50.MethCallEngine>] ; MSVBVM50.MethCallEngine 可以知道是p-code的了 测试…

160 - 39 damn

环境 Windows xp sp3 工具 1.exeinfo PE 2.ollydbg 查壳 OD加载就知道有壳了&#xff0c;可以esp定律直接脱掉 exeinfoPE查壳&#xff1a; 测试 点击LOCKED图片会弹出消息框&#xff0c;Register注册按钮无法点击&#xff01; 猜测Register按钮会在输入正确的nam…

[转载] Python3网络爬虫

这篇文章描述了使用python开发最小的网络爬虫的方法和步骤, 以及如何用fiddler来探索浏览器的行为来帮助爬虫的开发. http://www.yiibai.com/python/python3-webbug-series4.html 转载于:https://www.cnblogs.com/zhengran/p/4177944.html

不适用第三方变量,交换两个数

异或实现&#xff1a; void foo(int *a,int *b){ *a*a^*b; *b*a^*b; *a*a^*b;}void main(){int a1,b2; foo(&a,&b); printf("%d.%d.%d",a,b); } 或者下例&#xff1a; void foo(int *a,int *b){ *a*a*b; *b*a-*b; *a*a-*b;}void main(){int a1,b2,c3; foo(&a…

Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框

原文出处&#xff1a;博主宇宙的极客http://www.cnblogs.com/nokiaguy/archive/2010/07/27/1786482.html 众所周知&#xff0c;AlertDialog类用于显示对话框。关于AlertDialog的基本用法在这里就不详细介绍了&#xff0c;网上有很多&#xff0c;读者可以自己搜索。那么本文要介…