160 - 47 DueList.2

环境:
Windows xp sp3

工具:
Ollydbg
exeinfope

0x00 查壳

无壳的程序

0x01 分析

运行后说需要keyfile,那就创建一个。
OD载入找找看需要的keyfile叫什么名字

00401000 > $  6A 00         push 0x0                                 ; |/pModule = NULL
00401002   .  E8 64020000   call <jmp.&KERNEL32.GetModuleHandleA>    ; |\GetModuleHandleA
00401007   .  A3 77214000   mov dword ptr ds:[0x402177],eax          ; |
0040100C   .  C705 97214000>mov dword ptr ds:[0x402197],0x4003       ; |
00401016   .  C705 9B214000>mov dword ptr ds:[0x40219B],DueList_.004>; |
00401020   .  C705 9F214000>mov dword ptr ds:[0x40219F],0x0          ; |
0040102A   .  C705 A3214000>mov dword ptr ds:[0x4021A3],0x0          ; |
00401034   .  A1 77214000   mov eax,dword ptr ds:[0x402177]          ; |
00401039   .  A3 A7214000   mov dword ptr ds:[0x4021A7],eax          ; |
0040103E   .  6A 04         push 0x4                                 ; |/RsrcName = 4.
00401040   .  50            push eax                                 ; ||hInst => NULL
00401041   .  E8 3F030000   call <jmp.&USER32.LoadIconA>             ; |\LoadIconA
00401046   .  A3 AB214000   mov dword ptr ds:[0x4021AB],eax          ; |
0040104B   .  68 007F0000   push 0x7F00                              ; |/RsrcName = IDC_ARROW
00401050   .  6A 00         push 0x0                                 ; ||hInst = NULL
00401052   .  E8 C8020000   call <jmp.&USER32.LoadCursorA>           ; |\LoadCursorA
00401057   .  A3 AF214000   mov dword ptr ds:[0x4021AF],eax          ; |
0040105C   .  6A 00         push 0x0                                 ; |/hTemplateFile = NULL
0040105E   .  68 6F214000   push DueList_.0040216F                   ; ||Attributes = READONLY|HIDDEN|SYSTEM|ARCHIVE|TEMPORARY|402048
00401063   .  6A 03         push 0x3                                 ; ||Mode = OPEN_EXISTING
00401065   .  6A 00         push 0x0                                 ; ||pSecurity = NULL
00401067   .  6A 03         push 0x3                                 ; ||ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
00401069   .  68 000000C0   push 0xC0000000                          ; ||Access = GENERIC_READ|GENERIC_WRITE
0040106E   .  68 79204000   push DueList_.00402079                   ; ||FileName = "due-cm2.dat"
00401073   .  E8 0B020000   call <jmp.&KERNEL32.CreateFileA>         ; |\CreateFileA

运气很好,一进去就看到了名字。在40106E的位置:”due-cm2.dat”
那就创建一个叫这样的文件吧。

再运行看看。。。

keyfile无效。因为里面没有东西吧,看看需要什么。。

00401078   .  83F8 FF       cmp eax,-0x1                             ; |
0040107B   .  75 1D         jnz XDueList_.0040109A                   ; |
0040107D   .  6A 00         push 0x0                                 ; |/Style = MB_OK|MB_APPLMODAL
0040107F   .  68 01204000   push DueList_.00402001                   ; ||Title = "Duelist's Crackme #2"
00401084   .  68 17204000   push DueList_.00402017                   ; ||Text = "Your time-trial has ended... Please register and copy the keyfile sent to you to this directory!"
00401089   .  6A 00         push 0x0                                 ; ||hOwner = NULL
0040108B   .  E8 D7020000   call <jmp.&USER32.MessageBoxA>           ; |\MessageBoxA
00401090   .  E8 24020000   call <jmp.&KERNEL32.ExitProcess>         ; \ExitProcess
00401095   .  E9 28010000   jmp DueList_.004011C2
0040109A   >  6A 00         push 0x0                                 ; /pOverlapped = NULL
0040109C   .  68 73214000   push DueList_.00402173                   ; |pBytesRead = DueList_.00402173
004010A1   .  6A 46         push 0x46                                ; |BytesToRead = 46 (70.)
004010A3   .  68 1A214000   push DueList_.0040211A                   ; |Buffer = DueList_.0040211A
004010A8   .  50            push eax                                 ; |hFile
004010A9   .  E8 2F020000   call <jmp.&KERNEL32.ReadFile>            ; \ReadFile
004010AE   .  85C0          test eax,eax                             ;  判断文件是否为空
004010B0   .  75 02         jnz XDueList_.004010B4
004010B2   .  EB 43         jmp XDueList_.004010F7
004010B4   >  33DB          xor ebx,ebx
004010B6   .  33F6          xor esi,esi
004010B8   .  833D 73214000>cmp dword ptr ds:[0x402173],0x12         ;  长度至少为18
004010BF   .  7C 36         jl XDueList_.004010F7
004010C1   >  8A83 1A214000 mov al,byte ptr ds:[ebx+0x40211A]
004010C7   .  3C 00         cmp al,0x0
004010C9   .  74 08         je XDueList_.004010D3
004010CB   .  3C 01         cmp al,0x1                               ;  要有至少两个0x1
004010CD   .  75 01         jnz XDueList_.004010D0
004010CF   .  46            inc esi
004010D0   >  43            inc ebx
004010D1   .^ EB EE         jmp XDueList_.004010C1
004010D3   >  83FE 02       cmp esi,0x2
004010D6   .  7C 1F         jl XDueList_.004010F7
004010D8   .  33F6          xor esi,esi
004010DA   .  33DB          xor ebx,ebx
004010DC   >  8A83 1A214000 mov al,byte ptr ds:[ebx+0x40211A]
004010E2   .  3C 00         cmp al,0x0
004010E4   .  74 09         je XDueList_.004010EF
004010E6   .  3C 01         cmp al,0x1                               ;  0x1前面之和要为0x1D5
004010E8   .  74 05         je XDueList_.004010EF
004010EA   .  03F0          add esi,eax
004010EC   .  43            inc ebx                                  ;  记录第1个0x1的位置
004010ED   .^ EB ED         jmp XDueList_.004010DC
004010EF   >  81FE D5010000 cmp esi,0x1D5
004010F5   .  74 1D         je XDueList_.00401114
004010F7   >  6A 00         push 0x0                                 ; |/Style = MB_OK|MB_APPLMODAL
004010F9   .  68 01204000   push DueList_.00402001                   ; ||Title = "Duelist's Crackme #2"
004010FE   .  68 86204000   push DueList_.00402086                   ; ||Text = "Your current keyfile is invalid... Please obtain a valid one from the software author!"
00401103   .  6A 00         push 0x0                                 ; ||hOwner = NULL
00401105   .  E8 5D020000   call <jmp.&USER32.MessageBoxA>           ; |\MessageBoxA
0040110A   .  E8 AA010000   call <jmp.&KERNEL32.ExitProcess>         ; \ExitProcess
0040110F   .  E9 AE000000   jmp DueList_.004011C2
00401114   >  33F6          xor esi,esi
00401116   >  43            inc ebx                                  ;  第1个0x1后第2个0x1前的内容就是名字
00401117   .  8A83 1A214000 mov al,byte ptr ds:[ebx+0x40211A]
0040111D   .  3C 00         cmp al,0x0
0040111F   .  74 18         je XDueList_.00401139
00401121   .  3C 01         cmp al,0x1
00401123   .  74 14         je XDueList_.00401139
00401125   .  83FE 0F       cmp esi,0xF
00401128   .  73 0F         jnb XDueList_.00401139
0040112A   .  3286 1A214000 xor al,byte ptr ds:[esi+0x40211A]        ;  这里是计算名字,这个没什么所谓
00401130   .  8986 60214000 mov dword ptr ds:[esi+0x402160],eax
00401136   .  46            inc esi
00401137   .^ EB DD         jmp XDueList_.00401116
00401139   >  43            inc ebx
0040113A   .  33F6          xor esi,esi
0040113C   >  8A83 1A214000 mov al,byte ptr ds:[ebx+0x40211A]
00401142   .  3C 00         cmp al,0x0
00401144   .  74 09         je XDueList_.0040114F
00401146   .  3C 01         cmp al,0x1                               ;  计算第2个0x1后的值
00401148   .^ 74 F2         je XDueList_.0040113C
0040114A   .  03F0          add esi,eax
0040114C   .  43            inc ebx
0040114D   .^ EB ED         jmp XDueList_.0040113C
0040114F   >  81FE B2010000 cmp esi,0x1B2                            ;  这里和前面类似,也要使得值满足一定要求
00401155   .^ 75 A0         jnz XDueList_.004010F7                   ;  不满足要求就跳到错误处

0x02 算法分析

算法相对简单:
1、一开始会判断文件里的二进制值中有几个0x01,如果少于两个就错误。
2、将第一个0x01之前的所有二进制值相加,要满足它们的和为0x1D5
3、将第一个0x01和第二个0x01中间的值进行异或计算,得到的内容用于注册成功后显示。
4、将第二个0x01之后的值进行相加,要满足它们的和为0x1B2

所以很简单就得到这个:

31 32 33 34 35 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 
0D 0D 0D 0D 13 01 56 5C 46 56 51 0D 0D 0D 0D 0D 
0D 0D 0D 0D 0D 01 88 88 A2

结果为:

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

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

相关文章

如何解决Visual Studio2012 与此版本的Windows不兼容

解决方案&#xff1a; http://www.microsoft.com/zh-CN/download/details.aspx?id36020 下载更新转载于:https://www.cnblogs.com/awodefeng/p/3373343.html

160 - 48 DueList.3

环境&#xff1a; Windows xp sp3 工具&#xff1a; Ollydbg exeinfope 0x00 查壳 无壳的程序 0x01 分析 应该就是选上某个或多个框后点Check就能成功的&#xff0c;那应该就是不同框对应不同的值咯。旁边还有个提示&#xff1a;建议使用资源编辑器。 直接OD载入&#x…

为什么django+mongo在windows上session能够获取到,同样的程序在linux上就会报session的变量错误,keyerror?...

settings&#xff1a;SESSION_ENGINE django.contrib.sessions.backends.cache 其它地方&#xff1a;正常存取值。request.session["mm"]“MM” 转载于:https://www.cnblogs.com/angelfeeling/p/4211261.html

图片上传 关于压缩的问题

图片上传 关于压缩的问题 如果不压缩&#xff0c;图片的数据量非常大&#xff0c;很影响上传速度 http://blog.csdn.net/jinglijun/article/details/8751269 http://blog.csdn.net/jinglijun/article/details/8751220转载于:https://www.cnblogs.com/kevingod/p/3375507.html

160 - 49 DueList.4

环境&#xff1a; Windows xp sp3 工具&#xff1a; ollydbg exeinfope 0x00 查壳 无壳的程序 0x01 分析 运行后随便输入点东西&#xff0c; OD载入&#xff1a; 00401127 > /6A 00 push 0x0 ; /lParam 0 00401129 …

java中的codereview

&#xfeff;&#xfeff;关于codereview&#xff0c;在平时的开发中&#xff0c;经常忽略的环节&#xff0c;参照目前介绍写好代码的几本书和之前掉进的坑&#xff0c;做了一个总结&#xff0c;分享出来。 为什么要做 通过review规避一些代码层面的问题提升可读性&#xff0c;…

linux下开机启动脚本的方法

1.准备好要随机启动的程序&#xff0c;例如 /root/test.sh 。确保其可执行。 2.在目录 /etc/init.d/ 下编写控制脚本 test 。 #!/bin/sh ### BEGIN INIT INFO # Provides: test # Required-Start: $remote_fs # Required-Stop: $remote_fs # Default-Start: …

理解i-node

原文链接:http://www.ruanyifeng.com/blog/2011/12/inode.html 感觉讲得挺好,便做个记录.转载于:https://www.cnblogs.com/malware/p/3377616.html

MD5算法详解

0x00 前言 MD5是一种哈希算法&#xff0c;用来保证信息的完整性。 就一段信息对应一个哈希值&#xff0c;且不能通过哈希值推出这段信息&#xff0c;而且还需要保证不存在任意两段不相同的信息对应同一个哈希值。不过MD5算法算出来的值也就16个字节&#xff08;16*8128&#x…

我的2015年读书计划,每两周读完一本书!

近日看到一篇文章&#xff0c;说Facebook CEO 马克扎克伯格给自己的2015年定下了一个新的挑战&#xff0c;每两周就要读完一本书&#xff08;传送门&#xff1a;戳这里&#xff09;。想了一下&#xff0c;我自己也很久没看书了&#xff0c;所以今年要改变一下&#xff0c;给自己…

书到用时方恨少

以前觉得的自己的英语还行&#xff0c;四级&#xff0c;六级的什么早就在读书的时候过了&#xff0c; 工作以后&#xff0c;陆陆续续也一直用着英语。 最近发现和老外私下聊天的时候&#xff0c;词汇量严重不足。不明白老外在说什么&#xff0c;一起跟着傻笑。 活到老&#xff…

kettle7.1 右上角不显示connect

kettle7.1右上角不显示connect&#xff0c;就无法使用资源库了。 总结一下解决方法&#xff1a; 1.可能是jdk版本不对&#xff0c;最好使用1.8。原本是10.1&#xff0c;不显示connect&#xff0c;后来装了个1.8后就能显示了。记得是要改环境&#xff0c;javac -version 能显示…

基于XMPP协议的aSmack源码分析

在研究如何实现Pushing功能期间&#xff0c;收集了很多关于Pushing的资料&#xff0c;其中有一个androidnp开源项目用的人比较多&#xff0c;但是由于长时间没有什么人去维护&#xff0c;听说bug的几率挺多的&#xff0c;为了以后自己的产品稳定些&#xff0c;所以就打算自己研…

[Reverse] - 百度杯”CTF比赛 2017 二月场-CrackMe-1

环境&#xff1a;Windows XP 工具&#xff1a; IDA OD EXEINFOPE 0x00 查壳 0x01 分析 拖入OD&#xff0c;字符串查找看一看。 跟进去看就可以知道关键call了 0040196A . 48 dec eax 0040196B . 0F85 C4000000 jnz CrackMe1.00401A35 00401971 . …

【DeepLearning】Exercise:Learning color features with Sparse Autoencoders

Exercise:Learning color features with Sparse Autoencoders 习题链接&#xff1a;Exercise:Learning color features with Sparse Autoencoders sparseAutoencoderLinearCost.m function [cost,grad,features] sparseAutoencoderLinearCost(theta, visibleSize, hiddenSize,…

win7 64位系统下 PL/SQL无法连接的问题

第一步&#xff1a;下载oracle客户端 由于 PLSQL Developer 没有64位版本&#xff0c;所以在64位系统上运行该程链接64位Oracle时就会报错&#xff0c;笔者为这个问题纠结了好几天&#xff0c;后来通过请教Google 动手实践&#xff0c;终于搞定了这个问题。现在把笔者解决的过…

SQL2008R2 express版本不支持维护计划

SQL2008R2 express版本不支持维护计划转载于:https://www.cnblogs.com/toSeeMyDream/p/4218626.html

SHA1算法详解

0x00 前言 SHA1算法也是哈希算法的一种&#xff0c;只要理解了MD5算法&#xff0c;SHA1也很快就能理解。 MD5算法可以参考&#xff1a;MD5算法详解 MD5算法得出的MD5值长度为16个字节&#xff08;8*16128位&#xff09; SHA1算法得出的SHA1值长度为20个字节&#xff08;8*2…

HTML5 地理位置定位(HTML5 Geolocation)

地理位置&#xff08;Geolocation&#xff09;是 HTML5 的重要特性之一&#xff0c;提供了确定用户位置的功能&#xff0c;借助这个特性能够开发基于位置信息的应用。今天这篇文章向大家介绍一下HTML5 地理位置定位的基本原理及各个浏览器的数据精度情况。 在访问位置信息前&a…

2016腾讯安全挑战赛第一轮-PC游戏方向

0x00 查壳 无壳的VC程序 0x01 测试 没有消息弹窗&#xff0c;尝试对函数下断点。 OD载入后&#xff0c;CtrlN查找函数&#xff0c;找到GetDlgItem 程序运行起来&#xff0c;等输入完后点击确定后程序断下。一路F8就来到这里 00401EED . E8 6A5B0000 call Tenc…