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.pswp.cn/news/376355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376355.shtml
英文地址,請注明出處:http://en.pswp.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…