160 - 5 ajj.2
環境:
Windows xp sp3
打開,輸入點東西到輸入框(這里把第一個輸出框稱為text1)里面,點一下注冊,什么反應都沒有。
到處都點一點,每張圖片都點一下,還是什么反應都沒有。
查殼:
發現這東西有個upx殼,把殼脫掉
脫掉后OD載入,有了上次的經驗,猜測這次也是一樣
在字符串中搜索成功的字眼。如果用插件搜索是可以找到成功注冊的內容的
如果不用插件的話,我是搜不到的。只有一些有趣的字符串:
00446AEB ascii "FormCreate" 00446AFC ascii "Timer1Timer" 00446B0E ascii "Button1MouseDown" 00446B25 ascii "Panel1DblClick" 00446B3A ascii "Edit2DblClick" 00446B4E ascii "FormMouseMove" 00446B62 ascii "Image1MouseDown" 00446B78 ascii "Image2MouseDown" 00446B8E ascii "Image3MouseDown" 00446BA4 ascii "Image4MouseDown" 00446BBA ascii "Timer2Timer" 00446BCC ascii "Button1Click"
突然間發現:
00446AE6 /1C6C4400 dd CKme002.00446C1C 00446AEA . |0A db 0A 00446AEB . |46 6F 72 6D 4>ascii "FormCreate" 00446AF5 |12 db 12 00446AF6 |00 db 00 00446AF7 |286E4400 dd CKme002.00446E28 00446AFB . |0B db 0B 00446AFC . |54 69 6D 65 7>ascii "Timer1Timer" 00446B07 |17 db 17 00446B08 |00 db 00 00446B09 |A46F4400 dd CKme002.00446FA4 00446B0D . |10 db 10 00446B0E . |42 75 74 74 6>ascii "Button1MouseDown" 00446B1E |15 db 15 00446B1F |00 db 00 00446B20 |DC6F4400 dd CKme002.00446FDC 00446B24 . |0E db 0E 00446B25 . |50 61 6E 65 6>ascii "Panel1DblClick" 00446B33 |14 db 14 00446B34 |00 db 00 00446B35 |F86F4400 dd CKme002.00446FF8 00446B39 . |0D db 0D 00446B3A . |45 64 69 74 3>ascii "Edit2DblClick" 00446B47 |14 db 14 00446B48 |00 db 00 00446B49 |EC704400 dd CKme002.004470EC 00446B4D . |0D db 0D 00446B4E . |46 6F 72 6D 4>ascii "FormMouseMove" 00446B5B |16 db 16 00446B5C |00 db 00 00446B5D |34724400 dd CKme002.00447234 00446B61 . |0F db 0F 00446B62 . |49 6D 61 67 6>ascii "Image1MouseDown" 00446B71 |16 db 16 00446B72 |00 db 00 00446B73 |A0724400 dd CKme002.004472A0 00446B77 . |0F db 0F 00446B78 . |49 6D 61 67 6>ascii "Image2MouseDown" 00446B87 |16 db 16 00446B88 |00 db 00 00446B89 |0C734400 dd CKme002.0044730C 00446B8D . |0F db 0F 00446B8E . |49 6D 61 67 6>ascii "Image3MouseDown" 00446B9D |16 db 16 00446B9E |00 db 00 00446B9F |78734400 dd CKme002.00447378 00446BA3 . |0F db 0F 00446BA4 . |49 6D 61 67 6>ascii "Image4MouseDown" 00446BB3 |12 db 12 00446BB4 |00 db 00 00446BB5 |E4734400 dd CKme002.004473E4 00446BB9 . |0B db 0B 00446BBA . |54 69 6D 65 7>ascii "Timer2Timer"
跟FormCreate進去看看: 00446AE6 /1C6C4400 dd CKme0023.00446C1C 00446AEA . |0A db 0A 00446AEB . |46 6F 72 6D 4>ascii "FormCreate"
一直往下翻看到一個這個:
00446D49 |. BA EC6D4400 mov edx,CKme002.00446DEC ; ASCII "X:\ajj.126.c0m\j\o\j\o\ok.txt" 00446D4E |. 8D85 30FEFFFF lea eax,[local.116] 00446D54 |. E8 EDE7FBFF call CKme002.00405546 00446D59 |. 8D85 30FEFFFF lea eax,[local.116] 00446D5F |. E8 07EAFBFF call CKme002.0040576B 00446D64 |. E8 8BBAFBFF call CKme002.004027F4 00446D69 |. 85C0 test eax,eax 00446D6B |. 75 4B jnz XCKme002.00446DB8 00446D6D |. 8D55 FC lea edx,[local.1] 00446D70 |. 8D85 30FEFFFF lea eax,[local.116] 00446D76 |. E8 5DD1FBFF call CKme002.00403ED8 00446D7B |. E8 44BAFBFF call CKme002.004027C4 00446D80 |. 8B45 FC mov eax,[local.1] 00446D83 |. BA 146E4400 mov edx,CKme002.00446E14 00446D88 |. E8 0BCFFBFF call CKme002.00403C98 00446D8D |. 74 0A je XCKme002.00446D99 00446D8F |. C783 04030000>mov dword ptr ds:[ebx+0x304],0xC34 00446D99 |> 8D85 30FEFFFF lea eax,[local.116] 00446D9F |. E8 44E8FBFF call CKme002.004055E8 00446DA4 |. E8 1BBAFBFF call CKme002.004027C4 00446DA9 |. B2 01 mov dl,0x1 00446DAB |. 8B83 F0020000 mov eax,dword ptr ds:[ebx+0x2F0] 00446DB1 |. E8 EED1FDFF call CKme002.00423FA4 00446DB6 |. EB 0A jmp XCKme002.00446DC2 00446DB8 |> C783 04030000>mov dword ptr ds:[ebx+0x304],0xC34 00446DC2 |> 33C0 xor eax,eax 00446DC4 |. 5A pop edx 00446DC5 |. 59 pop ecx 00446DC6 |. 59 pop ecx 00446DC7 |. 64:8910 mov dword ptr fs:[eax],edx 00446DCA |. 68 DF6D4400 push CKme002.00446DDF 00446DCF |> 8D45 FC lea eax,[local.1] 00446DD2 |. E8 31CBFBFF call CKme002.00403908 00446DD7 \. C3 retn這是打開X盤里面的(……)的ok.txt文件嗎?我技術不佳,不知道哪里來的X盤,就算有打開了這個文件又有什么用呢?
先不管,跑到第二個--Timer1Timer這里看一看,翻了翻好像沒什么特別的東西。
反正Timer1都看了,也看看Timer2是干什么的:
發現有好多個比較,比較后面居然有個成功注冊的地方(反正我這里不用插件找字符串的話是看不到這個注釋的)。
那上面就是檢測的地方咯,在004473E4下個斷點,跑起來,等一段時間后就停下來了,發現[ebx+304]這個位置是:961AFC
后面比較的數據也在后面。得到上面每個位置的值的要求后,就找找看哪里修改了這5個地方的值。
突然發現在FormCreate這個事件里面有幾個0xC34。
本來是沒有x盤的,要求又要是x盤,試一試把文件里的X改為D(希望沒有檢測),雖然這樣做不好
00403C98: 00403C98 /$ 53 push ebx 00403C99 |. 56 push esi 00403C9A |. 57 push edi 00403C9B |. 89C6 mov esi,eax ; esi是文件指針 00403C9D |. 89D7 mov edi,edx ; edi是比較內容 00403C9F |. 39D0 cmp eax,edx ; 指向的內容是一樣的,沒必要繼續下去 00403CA1 |. 0F84 8F000000 je CKme0023.00403D36 00403CA7 |. 85F6 test esi,esi ; 檢測指針是否為空 00403CA9 |. 74 68 je XCKme0023.00403D13 00403CAB |. 85FF test edi,edi 00403CAD |. 74 6B je XCKme0023.00403D1A 00403CAF |. 8B46 FC mov eax,dword ptr ds:[esi-0x4] ; 文件長度 00403CB2 |. 8B57 FC mov edx,dword ptr ds:[edi-0x4] ; 13 00403CB5 |. 29D0 sub eax,edx ; 如果長度為13,eax是0,影響后面的ZF標志位 00403CB7 |. 77 02 ja XCKme0023.00403CBB 00403CB9 |. 01C2 add edx,eax 00403CBB |> 52 push edx ; 取小的那個長度 00403CBC |. C1EA 02 shr edx,0x2 ; /4設置循環次數 00403CBF |. 74 26 je XCKme0023.00403CE7 00403CC1 |> 8B0E /mov ecx,dword ptr ds:[esi] ; 文件的內容 00403CC3 |. 8B1F |mov ebx,dword ptr ds:[edi] ; 內存的內容 00403CC5 |. 39D9 |cmp ecx,ebx ; 比較 00403CC7 |. 75 58 |jnz XCKme0023.00403D21 ; 不等就跳 00403CC9 |. 4A |dec edx ; 循環次數減1 00403CCA |. 74 15 |je XCKme0023.00403CE1 ; 用來退出循環 00403CCC |. 8B4E 04 |mov ecx,dword ptr ds:[esi+0x4] 00403CCF |. 8B5F 04 |mov ebx,dword ptr ds:[edi+0x4] 00403CD2 |. 39D9 |cmp ecx,ebx 00403CD4 |. 75 4B |jnz XCKme0023.00403D21 00403CD6 |. 83C6 08 |add esi,0x8 00403CD9 |. 83C7 08 |add edi,0x8 00403CDC |. 4A |dec edx 00403CDD |.^ 75 E2 \jnz XCKme0023.00403CC1 ; 觀察跳轉的位置,不對的時候跳到找找是哪個位置不對 00403CDF |. EB 06 jmp XCKme0023.00403CE7 00403CE1 |> 83C6 04 add esi,0x4 ; 過早退出 00403CE4 |. 83C7 04 add edi,0x4 00403CE7 |> 5A pop edx ; 拿回長度 00403CE8 |. 83E2 03 and edx,0x3 ; 和0x3比較,等于就跳 00403CEB |. 74 22 je XCKme0023.00403D0F ; 用于確定剩下來的比較次數 00403CED |. 8B0E mov ecx,dword ptr ds:[esi] ; 后面那一部分內容 00403CEF |. 8B1F mov ebx,dword ptr ds:[edi] 00403CF1 |. 38D9 cmp cl,bl 00403CF3 |. 75 41 jnz XCKme0023.00403D36 00403CF5 |. 4A dec edx 00403CF6 |. 74 17 je XCKme0023.00403D0F 00403CF8 |. 38FD cmp ch,bh 00403CFA |. 75 3A jnz XCKme0023.00403D36 00403CFC |. 4A dec edx 00403CFD |. 74 10 je XCKme0023.00403D0F 00403CFF |. 81E3 0000FF00 and ebx,0xFF0000 00403D05 |. 81E1 0000FF00 and ecx,0xFF0000 00403D0B |. 39D9 cmp ecx,ebx 00403D0D |. 75 27 jnz XCKme0023.00403D36 00403D0F |> 01C0 add eax,eax ; 這里會使得ZF改變,如果文件是正確的內容,eax是0 00403D11 |. EB 23 jmp XCKme0023.00403D36 00403D13 |> 8B57 FC mov edx,dword ptr ds:[edi-0x4] 00403D16 |. 29D0 sub eax,edx 00403D18 |. EB 1C jmp XCKme0023.00403D36 00403D1A |> 8B46 FC mov eax,dword ptr ds:[esi-0x4] 00403D1D |. 29D0 sub eax,edx 00403D1F |. EB 15 jmp XCKme0023.00403D36 00403D21 |> 5A pop edx 00403D22 |. 38D9 cmp cl,bl 00403D24 |. 75 10 jnz XCKme0023.00403D36 00403D26 |. 38FD cmp ch,bh 00403D28 |. 75 0C jnz XCKme0023.00403D36 00403D2A |. C1E9 10 shr ecx,0x10 00403D2D |. C1EB 10 shr ebx,0x10 00403D30 |. 38D9 cmp cl,bl 00403D32 |. 75 02 jnz XCKme0023.00403D36 00403D34 |. 38FD cmp ch,bh 00403D36 |> 5F pop edi 00403D37 |. 5E pop esi 00403D38 |. 5B pop ebx 00403D39 \. C3 retn
跟進去之后看到比較的內容地址是:00446E14 ,內容是:
00446E14 ?20 61 6A 6A D0 B4 B5 C4 43 4B 6D 65 D5 E6 C0 C3 ? ajj寫的CKme真爛
00446E24 ?21 FF FF ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??!
部分內容顯示不出來,也輸入不進去。那就用16進制編輯器填進去。填進去之后再OD載入文件,發現內存里面的[ebx+304]不是0xC34了(哈哈哈),
而且程序的界面又多了一個輸入框(這里稱為text2)。這個text2是輸入不了東西的,也點不了。但是的確是可以用的,因為有個:
Edit2DblClick
在這個事件上面下斷點,雙擊也是沒有反應。沒辦法,先看其他,那就看看FormMouseMove吧:
004470EC /. 55 push ebp 004470ED |. 8BEC mov ebp,esp 004470EF |. 6A 00 push 0x0 004470F1 |. 6A 00 push 0x0 004470F3 |. 53 push ebx 004470F4 |. 8BD8 mov ebx,eax 004470F6 |. 8B55 08 mov edx,[arg.1] 004470F9 |. 8B45 0C mov eax,[arg.2] 004470FC |. 33C9 xor ecx,ecx 004470FE |. 55 push ebp 004470FF |. 68 17724400 push CKme0023.00447217 00447104 |. 64:FF31 push dword ptr fs:[ecx] 00447107 |. 64:8921 mov dword ptr fs:[ecx],esp 0044710A |. 8B8B E0020000 mov ecx,dword ptr ds:[ebx+0x2E0] 00447110 |. 8079 47 01 cmp byte ptr ds:[ecx+0x47],0x1 ; 只有在第3張圖片出現時才為1 00447114 |. 75 19 jnz XCKme0023.0044712F 00447116 |. 3D E2000000 cmp eax,0xE2 ; 這里的eax是指鼠標的橫坐標 0044711B |. 7E 12 jle XCKme0023.0044712F 0044711D |. 81FA 2C010000 cmp edx,0x12C ; 這里的edx是指鼠標的縱坐標 00447123 |. 7E 0A jle XCKme0023.0044712F 00447125 |. C783 10030000>mov dword ptr ds:[ebx+0x310],0x10 ;如果條件符合了就把[ebx+0x310]的值賦為0x10 0044712F |> 8B8B DC020000 mov ecx,dword ptr ds:[ebx+0x2DC] 00447135 |. 8079 47 01 cmp byte ptr ds:[ecx+0x47],0x1 ; 只有第2張圖片出現時才為1 00447139 |. 75 6C jnz XCKme0023.004471A7 0044713B |. 83F8 17 cmp eax,0x17 ; 這里的eax同上 0044713E |. 7D 67 jge XCKme0023.004471A7 00447140 |. 81FA 2C010000 cmp edx,0x12C ; 這里的edx同上 00447146 |. 7E 5F jle XCKme0023.004471A7 00447148 |. 83BB 10030000>cmp dword ptr ds:[ebx+0x310],0x10 ;如果[ebx+0x310]的值為0x10時才繼續往下,否則就跳走 0044714F |. 75 56 jnz XCKme0023.004471A7 00447151 |. 83BB 0C030000>cmp dword ptr ds:[ebx+0x30C],0x9 ; 30c不能為9 00447158 |. 74 4D je XCKme0023.004471A7 ; 這里不能跳 0044715A |. C783 10030000>mov dword ptr ds:[ebx+0x310],0xF94 ; 這里賦值 00447164 |. 8B83 0C030000 mov eax,dword ptr ds:[ebx+0x30C] 0044716A |. 83E8 01 sub eax,0x1 ; Switch (cases 1..3) 0044716D |. 72 0A jb XCKme0023.00447179 0044716F |. 74 14 je XCKme0023.00447185 00447171 |. 48 dec eax 00447172 |. 74 1D je XCKme0023.00447191 00447174 |. 48 dec eax 00447175 |. 74 26 je XCKme0023.0044719D 00447177 |. EB 2E jmp XCKme0023.004471A7 00447179 |> C783 14030000>mov dword ptr ds:[ebx+0x314],0x41 00447183 |. EB 22 jmp XCKme0023.004471A7 00447185 |> C783 14030000>mov dword ptr ds:[ebx+0x314],0x3D ; Case 1 of switch 0044716A 0044718F |. EB 16 jmp XCKme0023.004471A7 00447191 |> C783 14030000>mov dword ptr ds:[ebx+0x314],0x34 ; Case 2 of switch 0044716A 0044719B |. EB 0A jmp XCKme0023.004471A7 0044719D |> C783 14030000>mov dword ptr ds:[ebx+0x314],0xDF ; Case 3 of switch 0044716A 004471A7 |> 81BB 10030000>cmp dword ptr ds:[ebx+0x310],0xF94 ; Default case of switch 0044716A 004471B1 |. 75 46 jnz XCKme0023.004471F9
那就可以猜測把[ebx+310]的值改為0xF94的方法是在第3張圖出現時鼠標從程序界面的右下角進入,多晃鼠標幾次,讓[ebx+0x310]的值變成0x10,
等到第2張圖片的時候鼠標從程序界面的左下角進入,也是多晃幾次,讓[ebx+0x310]的值變成0xF94
在完成上面的操作之前要保證[ebx+0x30C]的值不為0x9,但是程序一開始這個值就是0x9了,所以應該有地方更改的。
看一看Button1MouseDown:
00446FA4 /. 55 push ebp 00446FA5 |. 8BEC mov ebp,esp 00446FA7 |. 8B90 08030000 mov edx,dword ptr ds:[eax+0x308] 00446FAD |. 81FA 0D230000 cmp edx,0x230D 00446FB3 |. 74 20 je XCKme0023.00446FD5 00446FB5 |. 80F9 01 cmp cl,0x1 ; 按左鍵cl值為0,右鍵為1,中鍵為2 00446FB8 |. 75 09 jnz XCKme0023.00446FC3 00446FBA |. 8380 08030000>add dword ptr ds:[eax+0x308],0x3 ; 每按一次右鍵就加3,加到29D為止 00446FC1 |. EB 12 jmp XCKme0023.00446FD5 00446FC3 |> 81FA 94020000 cmp edx,0x294 00446FC9 |. 7D 0A jge XCKme0023.00446FD5 00446FCB |. C780 08030000>mov dword ptr ds:[eax+0x308],0x230D ; 這里把[eax+0x308]的值改為0x230D 00446FD5 |> 5D pop ebp 00446FD6 \. C2 0C00 retn 0xC
[961B00],一開始是0x28E的。點5次就夠了。為什么說加到0x29D就夠了呢?
往下翻一翻就是了:
00446FDC . 81B8 08030000>cmp dword ptr ds:[eax+0x308],0x29D ;比較是不是0x29D,不是就跳 00446FE6 . 75 0D jnz XCKme0023.00446FF5 00446FE8 . B2 01 mov dl,0x1 00446FEA . 8B80 F0020000 mov eax,dword ptr ds:[eax+0x2F0] 00446FF0 . 8B08 mov ecx,dword ptr ds:[eax] 00446FF2 . FF51 5C call dword ptr ds:[ecx+0x5C] ;這個開放了text2 00446FF5 > C3 retn原來上面這個函數是Panel1DblClick事件的。
于是有了個解鎖text2的方法:
一開始就右鍵點注冊5次,然后趁著“人之初”那些圖片還沒出來或者沒有完全顯示的時候,雙擊那個圖片框框(Panel),
然后發現text2解鎖了,可以輸入了,可以雙擊了。在Edit2DblClick事件函數下個斷點,輸入個“123456”,然后雙擊
發現停了下來:
于是就有:
在text2可用之后,輸入個字符串,第2個字符要是“_”,第6個字符是“,”(這個是逗號),我輸入的是”1_345,78”,然后雙擊text2,使得[ebx+0x30C]變成其他東西。
目前位置我們把[ebx+0x304]、[ebx+0x308]、[ebx+0x310]、[ebx+0x31C]都搞好了,至于說前面的內容沒有提到過[ebx+0x31C]這個東西,因為這是個Button1Click事件
會導致[ebx+0x31C]的值為0x3E7,不要去click就好了。
004474C0 ? C780 1C030000>mov dword ptr ds:[eax+0x31C],0x3E7[ebx+0x314] 和 [ebx+0x318]的值是怎么才使得相同的呢?
看看我們還有什么事件沒有看過,就是那4個點圖片了。
00447234 /. 55 push ebp ; 這個是第1張圖片的 00447235 |. 8BEC mov ebp,esp 00447237 |. 53 push ebx 00447238 |. 56 push esi 00447239 |. 8BD9 mov ebx,ecx 0044723B |. 8BF0 mov esi,eax 0044723D |. 6A 00 push 0x0 0044723F |. 66:8B0D 70724>mov cx,word ptr ds:[0x447270] 00447246 |. B2 02 mov dl,0x2 00447248 |. B8 7C724400 mov eax,CKme0023.0044727C ; 注冊尚未成功,同志仍需努力! 8) 0044724D |. E8 42E4FFFF call CKme0023.00445694 00447252 |. 84DB test bl,bl 00447254 |. 75 07 jnz XCKme0023.0044725D 00447256 |. 8386 18030000>add dword ptr ds:[esi+0x318],0x2 ; 這里就是將[ebx+0x318]的值加上來,其他的也是差不多 0044725D |> 80FB 01 cmp bl,0x1 00447260 |. 75 07 jnz XCKme0023.00447269 00447262 |. 8386 18030000>add dword ptr ds:[esi+0x318],0x11 00447269 |> 5E pop esi 0044726A |. 5B pop ebx 0044726B |. 5D pop ebp 0044726C \. C2 0C00 retn 0xC于是有:點第1張圖:+2
點第2張圖:+3
點第3張圖:+5
點第4張圖:+7
最終[ebx+0x314的值是]0x34的,那么一開始就把第1張圖點26次。這樣[ebx+0x314]和[ebx+0x318]就相同了
總結操作過程:
保證那個ok.txt的存在,使得打開程序后,能看到text2。 然后在第1張圖片出來前,右鍵點5下注冊,雙擊顯示圖片的框框沒有圖片的那些部分。
用于解鎖text2,然后點第1張圖片26次。如果還沒點完,那就等下一輪吧。在第3張圖片“性相近”出來之前在text2輸入內容,一共8個字符,
第2個字符是“_”,第6個字符是",",在第3張圖片出來的時候鼠標在程序界面的右下角晃來晃去,多晃幾遍保證成功使得[ebx+0x310]的值變成0x10,
然后等第2張圖出來,如果第1張沒有點夠26次的就繼續點,夠了就不點。第2張圖出來后就用鼠標在程序左下角晃來晃去。多晃幾次,注冊按鈕就
會變成"注冊了"。
不是一定要點第1張圖片26次,反正4張圖片點一次的變化量出來了,將總的變化量加起來是52就行了。
如何不更改任何文件內容,可以搜索更改盤符的相關信息。將D盤改為X盤,或者將多分一個盤出來且將盤符改為X并且
在相關路徑創建文件。只有在成功讀取文件,程序界面才能出現text2
網站有資料說是[ebx+0x314]的值是不固定的,但是我在虛擬機得出的解決方法在實機上也可以用。
總結
以上是生活随笔為你收集整理的160 - 5 ajj.2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 160 - 4 ajj.1
- 下一篇: 160 - 6 aLoNg3x.1