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…

160 - 49 DueList.4

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

MD5算法详解

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

基于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;终于搞定了这个问题。现在把笔者解决的过…

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

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

JavascriptDOM(三)

简介 今天学习第二天的知识,js和BOM对象,再接再厉,fighting~学习原则 脚踏实地的走好每一步,要想学好高级部分,基础知识必须扎实呀 掌握基本语法,完成小案例,写博客作总结,基本就是这个节奏,下面我们一起快速入门吧JavaScript快速入门 1. js简介 1.js基于对象和事件驱动的脚本语…

看雪 2016CrackMe 攻防大赛 - 1-Crack_Me-凉飕飕

环境&#xff1a; Windows xp 工具&#xff1a; IDA EXEINFOPE OD 0x00 查壳 EXEINFOPE查壳&#xff0c; 无壳 0x01 分析 if ( (unsigned __int16)wParam 0x40B ) // 成功{*(_OWORD *)v22 xmmword_41DB98;v25 0;v23 xmmword_41DBA8;v24 xmmword_41DBB8;memset_4039D0…

使用CSDN-markdown编辑器

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

C++ vector类详解

转自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器&#xff0c;它是一种顺序容器&#xff0c;支持随机访问。vector是一块连续分配的内存&#xff0c;从数据安排的角度来讲&#xff0c;和数组极其相似&#xff0c;不同的地方就是…

ViewPager的使用方法和实现过程

看图先&#xff1a; 页面中填充内容是随机关键词飞入和飞出动画效果&#xff0c;随后会更新&#xff0c;现在请先无视吧 首先是 导入jar包 下载地址&#xff1a; android-support-v4.jar 布局文件里添加viewPager布局 [html] view plaincopyprint?<android.support.v4.vi…

如何通过浏览器在所有响应内容中查找文本

使用浏览器的开发者工具查找响应文件的内容 ** Chrome ** 版本&#xff1a; 快捷键&#xff1a;CtrlShiftF 可以看到已经查找出来了 ** firefox ** 版本

【Leetcode】【Easy】Implement strStr()

Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. 解题&#xff1a; 本题为典型的KMP算法考察题&#xff0c;KMP算法描述为&#xff1a; 设主串S&#xff0c;匹配串P&#xff0c;i为S的索引下…

Jenkins入门指南

新手学习使用Jenkins 安装好Jenkins后如何运行脚本 1.新建item 2.输入任务名称&#xff0c;选择项目类型&#xff0c;点击确定 3.填个描述就好了&#xff0c;新手学jenkins&#xff0c;其他都不看&#xff0c;跑起来再说 4.点这个高级&#xff0c;选择你要运行的脚本所在…

Sublime Text 3 史上最性感的编辑器

↑ ↑ ↑ ↑ ↑ 请看文件夹 ↑ ↑ ↑ ↑ ↑ 下载 / 安装 windows / MAC OS 官网下载&#xff0c;双击安装&#xff0c;这个都会吧&#xff5e; linux linux下安装&#xff0c;一种办法是从官网下载 tar.bz &#xff0c;手动安装。 这里介绍用 apt-get 自己主动安装方法&#xf…

swift入门之TableView

IOS8更新了&#xff0c;oc还将继续但新增了swift语言&#xff0c;能够代替oc编写ios应用&#xff0c;本文将使用swift作为编写语言&#xff0c;为大家提供step by step的教程。 工具 ios每次更新都须要更新xcode&#xff0c;这次也不例外&#xff0c;但使用xcode6&#xff0c;须…

Jmeter BeanShell学习(一) - BeanShell取样器(一)

通过利用BeanShell取样器设置请求发送的参数。 第一步&#xff1a;添加BeanShell取样器 第二步&#xff1a;在BeanShell中输入执行的代码 log.info("脚本开始执行"); //意思是将字符串输出到日志消息中 vars.put("username","123163.com");//…