IE瀏覽器修復工具 V1.1 不完全演算法分析

看雪資料發表於2003-07-07

IE瀏覽器修復工具 V1.1 分析筆記

機器碼:B6D6DE88A6
假碼:87654321
註冊碼:93FDAF96

下載地址: http://www.downloadsky.com/soft/12744.html

重啟驗證型,偵殼,ASPack 2.12 -> Alexey Solodovnikov的殼,Delphi 6.0編寫,PE-id脫殼。經查,註冊資訊寫在“IE瀏覽器修復工具”目錄下的Dhsys.ini檔案中。

* Possible StringData Ref from Data Obj ->"Dhsys.ini"
                                 |
:004860B7 B988614800              mov ecx, 00486188
:004860BC E833E3F7FF              call 004043F4
:004860C1 8B4DF4                  mov ecx, dword ptr [ebp-0C]
:004860C4 B201                    mov dl, 01

* Possible StringData Ref from Data Obj ->",}C"
                                 |
:004860C6 A1E0724300              mov eax, dword ptr [004372E0]
:004860CB E8C012FBFF              call 00437390
:004860D0 8945F0                  mov dword ptr [ebp-10], eax
:004860D3 33C0                    xor eax, eax
:004860D5 55                      push ebp
:004860D6 6842614800              push 00486142
:004860DB 64FF30                  push dword ptr fs:[eax]
:004860DE 648920                  mov dword ptr fs:[eax], esp
:004860E1 6A00                    push 00000000
:004860E3 8D45E4                  lea eax, dword ptr [ebp-1C]
:004860E6 50                      push eax

* Possible StringData Ref from Data Obj ->"id"    //註冊成功後會生成
                                 |
:004860E7 B99C614800              mov ecx, 0048619C

* Possible StringData Ref from Data Obj ->"reg"
                                 |
:004860EC BAA8614800              mov edx, 004861A8
:004860F1 8B45F0                  mov eax, dword ptr [ebp-10]
:004860F4 8B18                    mov ebx, dword ptr [eax]
:004860F6 FF13                    call dword ptr [ebx]
:004860F8 8B45E4                  mov eax, dword ptr [ebp-1C]
:004860FB 8D4DF8                  lea ecx, dword ptr [ebp-08]

* Possible StringData Ref from Data Obj ->"IETOOLS"
                                 |
:004860FE BAB4614800              mov edx, 004861B4
:00486103 E8D8C2FFFF              call 004823E0
:00486108 8D55E0                  lea edx, dword ptr [ebp-20]

* Possible StringData Ref from Data Obj ->"IETOOLS"
                                 |
:0048610B B8B4614800              mov eax, 004861B4
:00486110 E88FB4FFFF              call 004815A4     //演算法call,跟進
:00486115 8B45E0                  mov eax, dword ptr [ebp-20]
:00486118 8B55F8                  mov edx, dword ptr [ebp-08]
:0048611B E8D4E3F7FF              call 004044F4    //關鍵比較,eax真碼
:00486120 7506                    jne 00486128    //不等則跳,跳則over
:00486122 C645FF01                mov [ebp-01], 01
:00486126 EB04                    jmp 0048612C

*********************************************************

跟進486110 E88FB4FFFF              call 004815A4   此call:

。。。。。。。。。。。。略。。。。。。。。

:004815DF 8B45E8                  mov eax, dword ptr [ebp-18]    //eax=機器碼:B6D6DE88A6
:004815E2 8D55EC                  lea edx, dword ptr [ebp-14]
:004815E5 E8BA0E0000              call 004824A4      //跟進看看
:004815EA 8B45EC                  mov eax, dword ptr [ebp-14]    //eax=F03FEE63D728BC7FF33F
:004815ED B90A000000              mov ecx, 0000000A    //ecx=A
:004815F2 33D2                    xor edx, edx
:004815F4 E80F30F8FF              call 00404608     //取上面eax值的前10位
:004815F9 8B45F0                  mov eax, dword ptr [ebp-10]    //eax=F03FEE63D7
:004815FC 8D55F4                  lea edx, dword ptr [ebp-0C]
:004815FF E8246CF8FF              call 00408228
:00481604 8B45F4                  mov eax, dword ptr [ebp-0C]    //eax=F03FEE63D7
:00481607 8D55F8                  lea edx, dword ptr [ebp-08]
:0048160A E8C969F8FF              call 00407FD8
:0048160F 8D45E0                  lea eax, dword ptr [ebp-20]
:00481612 50                      push eax
:00481613 8D4DDC                  lea ecx, dword ptr [ebp-24]
:00481616 8B55FC                  mov edx, dword ptr [ebp-04]
:00481619 8B45F8                  mov eax, dword ptr [ebp-08]    //eax=F03FEE63D7
:0048161C E8D70B0000              call 004821F8     //跟進看看
:00481621 8B45DC                  mov eax, dword ptr [ebp-24]    //eax=93FDAF961ECEA4865ADACBA5EE73066E
:00481624 B908000000              mov ecx, 00000008    //ecx=8
:00481629 33D2                    xor edx, edx
:0048162B E8D82FF8FF              call 00404608     //取上面eax值的前8位即為真碼
:00481630 8B45E0                  mov eax, dword ptr [ebp-20]    //eax=註冊碼:93FDAF96
:00481633 8D55E4                  lea edx, dword ptr [ebp-1C]
:00481636 E8ED6BF8FF              call 00408228
:0048163B 8B45E4                  mov eax, dword ptr [ebp-1C]
:0048163E 8BD3                    mov edx, ebx
:00481640 E89369F8FF              call 00407FD8
:00481645 33C0                    xor eax, eax

****************************************************************

跟進 4815E5 E8BA0E0000              call 004824A4  這個call:

:004824D6 8B45FC                  mov eax, dword ptr [ebp-04]    //eax=機器碼:B6D6DE88A6
:004824D9 E8CA1EF8FF              call 004043A8    //取得機器碼的位數
:004824DE 8BF0                    mov esi, eax     //esi=eax=A
:004824E0 85F6                    test esi, esi
:004824E2 7E47                    jle 0048252B
:004824E4 C745F801000000          mov [ebp-08], 00000001    //[ebp-08]置1

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00482529(C)
|
:004824EB 8B45FC                  mov eax, dword ptr [ebp-04]    //eax=機器碼:B6D6DE88A6
:004824EE 8B55F8                  mov edx, dword ptr [ebp-08]   //edx=1
:004824F1 8A4410FF                mov al, byte ptr [eax+edx-01]    //依次取機器碼字元的hex值送al
:004824F5 328338814800            xor al, byte ptr [ebx+00488138]    //al=al xor 記憶體地址488138+ebx中的值
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
記憶體中的值:
018F:00488138 B2 09 AA 55 93 6D 84 47-39 31 29 21 19 11 09 01 ?UmG91)!....
018F:00488148 3B 33 2B 23 1B 13 0B 03-3D 35 2D 25 1D 15 0D 05 ;3+#....=5-%....
018F:00488158 3F 37 2F 27 1F 17 0F 07-38 30 28 20 18 10 08 00 ?7/'....80( ....
018F:00488168 3A 32 2A 22 1A 12 0A 02-3C 34 2C 24 1C 14 0C 04 :2*"....<4,$....
018F:00488178 3E 36 2E 26 1E 16 0E 06-27 07 2F 0F 37 17 3F 1F >6.&....'./.7.?.
018F:00488188 26 06 2E 0E 36 16 3E 1E-25 05 2D 0D 35 15 3D 1D &...6.>.%.-.5.=.
018F:00488198 24 04 2C 0C 34 14 3C 1C-23 03 2B 0B 33 13 3B 1B $.,.4.<.#.+.3.;.
018F:004881A8 22 02 2A 0A 32 12 3A 1A-21 01 29 09 31 11 39 19 ".*.2.:.!.).1.9.
018F:004881B8 20 00 28 08 30 10 38 18-1F 00 00 00 00 00 00 00  .(.0.8.........
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
:004824FB 25FF000000              and eax, 000000FF
:00482500 8D4DF4                  lea ecx, dword ptr [ebp-0C]
:00482503 BA02000000              mov edx, 00000002
:00482508 E82F5FF8FF              call 0040843C
:0048250D 8B55F4                  mov edx, dword ptr [ebp-0C]     //把上面異或後的值依次放到edx中,迴圈結束edx的值為:F03FEE63D728BC7FF33F
:00482510 8BC7                    mov eax, edi
:00482512 E8991EF8FF              call 004043B0
:00482517 43                      inc ebx     //ebx加1
:00482518 81E307000080            and ebx, 80000007
:0048251E 7905                    jns 00482525
:00482520 4B                      dec ebx
:00482521 83CBF8                  or ebx, FFFFFFF8
:00482524 43                      inc ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048251E(C)
|
:00482525 FF45F8                  inc [ebp-08]
:00482528 4E                      dec esi     //機器碼的位數減1
:00482529 75C0                    jne 004824EB     //機器碼沒取完返回繼續迴圈。

************************************************************

跟進  48161C E8D70B0000              call 004821F8   這個call :

:00482235 8B55F8                  mov edx, dword ptr [ebp-08]    //edx=IETOOLS
:00482238 8B45FC                  mov eax, dword ptr [ebp-04]    //eax=F03FEE63D7
:0048223B E840FCFFFF              call 00481E80     //跟進這裡看看
:00482240 8D45F4                  lea eax, dword ptr [ebp-0C]
:00482243 E8A01EF8FF              call 004040E8
:00482248 8B45F0                  mov eax, dword ptr [ebp-10]     //這裡[ebp-10]記憶體地址裡存放著以後的註冊碼,
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
018F:01115BF8 93 FD AF 96 1E CE A4 86-5A DA CB A5 EE 73 06 6E .韋Z謁ヮs.n
018F:01115C08 00 5C 11 01 0C 5C 11 01-0C 5C 11 01 34 00 00 00 .\...\...\..4...
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
:0048224B E85821F8FF              call 004043A8
:00482250 8BD8                    mov ebx, eax
:00482252 4B                      dec ebx
:00482253 85DB                    test ebx, ebx
:00482255 7C4E                    jl 004822A5
:00482257 43                      inc ebx
:00482258 33F6                    xor esi, esi

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004822A3(C)
|
:0048225A 8D45EC                  lea eax, dword ptr [ebp-14]
:0048225D 50                      push eax
:0048225E 8B45F0                  mov eax, dword ptr [ebp-10]
:00482261 0FB60430                movzx eax, byte ptr [eax+esi]     //eax=93、FD、AF、96、1E、CE、A4、86、5A、DA、CB、A5、EE、73、06、6E
:00482265 8945E4                  mov dword ptr [ebp-1C], eax
:00482268 C645E800                mov [ebp-18], 00
:0048226C 8D55E4                  lea edx, dword ptr [ebp-1C]
:0048226F 33C9                    xor ecx, ecx

* Possible StringData Ref from Data Obj ->"%x"
                                 |
:00482271 B8E0224800              mov eax, 004822E0
:00482276 E80D6EF8FF              call 00409088
:0048227B 8B45EC                  mov eax, dword ptr [ebp-14]    //eax=93、FD、AF、96、1E、CE、A4、86、5A、DA、CB、A5、EE、73、06、6E
:0048227E E82521F8FF              call 004043A8
:00482283 48                      dec eax
:00482284 7510                    jne 00482296
:00482286 8D45EC                  lea eax, dword ptr [ebp-14]
:00482289 8B4DEC                  mov ecx, dword ptr [ebp-14]

* Possible StringData Ref from Data Obj ->"00"
                                 |
:0048228C BAEC224800              mov edx, 004822EC
:00482291 E85E21F8FF              call 004043F4

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00482284(C)
|
:00482296 8D45F4                  lea eax, dword ptr [ebp-0C]
:00482299 8B55EC                  mov edx, dword ptr [ebp-14]     //edx=93、FD、AF、96、1E、CE、A4、86、5A、DA、CB、A5、EE、73、06、6E
:0048229C E80F21F8FF              call 004043B0
:004822A1 46                      inc esi      //計算器esi加1
:004822A2 4B                      dec ebx    //減1
:004822A3 75B5                    jne 0048225A

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00482255(C)
|
:004822A5 8BC7                    mov eax, edi
:004822A7 8B55F4                  mov edx, dword ptr [ebp-0C]     //把上面計算得到的數連線起來,edx=93FDAF961ECEA4865ADACBA5EE73066E
:004822AA E88D1EF8FF              call 0040413C
:004822AF 33C0                    xor eax, eax

******************************************************************
跟進48223B E840FCFFFF              call 00481E80    這個call:    這個call最終沒有看明白,請高手指點!

:00481E80 55                      push ebp
:00481E81 8BEC                    mov ebp, esp
:00481E83 83C4CC                  add esp, FFFFFFCC
:00481E86 53                      push ebx
:00481E87 56                      push esi
:00481E88 33DB                    xor ebx, ebx
:00481E8A 895DCC                  mov dword ptr [ebp-34], ebx
:00481E8D 895DD8                  mov dword ptr [ebp-28], ebx
:00481E90 894DF4                  mov dword ptr [ebp-0C], ecx
:00481E93 8955F8                  mov dword ptr [ebp-08], edx
:00481E96 8945FC                  mov dword ptr [ebp-04], eax
:00481E99 8B45FC                  mov eax, dword ptr [ebp-04]
:00481E9C E8F726F8FF              call 00404598
:00481EA1 8B45F8                  mov eax, dword ptr [ebp-08]
:00481EA4 E8EF26F8FF              call 00404598
:00481EA9 33C0                    xor eax, eax
:00481EAB 55                      push ebp
:00481EAC 681D204800              push 0048201D
:00481EB1 64FF30                  push dword ptr fs:[eax]
:00481EB4 648920                  mov dword ptr fs:[eax], esp
:00481EB7 8B45FC                  mov eax, dword ptr [ebp-04]
:00481EBA E8E924F8FF              call 004043A8
:00481EBF 85C0                    test eax, eax
:00481EC1 7E28                    jle 00481EEB
:00481EC3 8B45FC                  mov eax, dword ptr [ebp-04]     //eax=F03FEE63D7
:00481EC6 E8DD24F8FF              call 004043A8
:00481ECB 8B55FC                  mov edx, dword ptr [ebp-04]     //edx=F03FEE63D7
:00481ECE 807C02FF00              cmp byte ptr [edx+eax-01], 00
:00481ED3 7516                    jne 00481EEB

* Possible StringData Ref from Data Obj ->"Error: the last char is NULL char."
                                 |
:00481ED5 B934204800              mov ecx, 00482034
:00481EDA B201                    mov dl, 01

* Possible StringData Ref from Data Obj ->""
                                 |
:00481EDC A13C734000              mov eax, dword ptr [0040733C]
:00481EE1 E8BA9BF8FF              call 0040BAA0
:00481EE6 E8391CF8FF              call 00403B24

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00481EC1(C), :00481ED3(C)
|
:00481EEB 8B45F8                  mov eax, dword ptr [ebp-08]    //eax=IETOOLS
:00481EEE E8B524F8FF              call 004043A8
:00481EF3 83F808                  cmp eax, 00000008
:00481EF6 7D2B                    jge 00481F23
:00481EF8 EB0D                    jmp 00481F07

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00481F12(C)
|
:00481EFA 8D45F8                  lea eax, dword ptr [ebp-08]
:00481EFD BA60204800              mov edx, 00482060
:00481F02 E8A924F8FF              call 004043B0

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00481EF8(U)
|
:00481F07 8B45F8                  mov eax, dword ptr [ebp-08]    //eax=IETOOLS
:00481F0A E89924F8FF              call 004043A8
:00481F0F 83F808                  cmp eax, 00000008
:00481F12 7CE6                    jl 00481EFA
:00481F14 EB0D                    jmp 00481F23

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00481F39(C)
|
:00481F16 8D45FC                  lea eax, dword ptr [ebp-04]
:00481F19 BA60204800              mov edx, 00482060
:00481F1E E88D24F8FF              call 004043B0

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00481EF6(C), :00481F14(U)
|
:00481F23 8B45FC                  mov eax, dword ptr [ebp-04]     //eax=F03FEE63D7
:00481F26 E87D24F8FF              call 004043A8     //取得位數
:00481F2B 2507000080              and eax, 80000007
:00481F30 7905                    jns 00481F37
:00481F32 48                      dec eax
:00481F33 83C8F8                  or eax, FFFFFFF8
:00481F36 40                      inc eax

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00481F30(C)
|
:00481F37 85C0                    test eax, eax
:00481F39 75DB                    jne 00481F16
:00481F3B 33DB                    xor ebx, ebx
:00481F3D 8D45DC                  lea eax, dword ptr [ebp-24]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00481F4D(C)
|
:00481F40 8B55F8                  mov edx, dword ptr [ebp-08]    //edx=IETOOLS
:00481F43 8A141A                  mov dl, byte ptr [edx+ebx]    //依次取IETOOLS各字元的hex送dl
:00481F46 8810                    mov byte ptr [eax], dl
:00481F48 43                      inc ebx
:00481F49 40                      inc eax
:00481F4A 83FB08                  cmp ebx, 00000008    //如果超過8位,則只取前8位
:00481F4D 75F1                    jne 00481F40      //沒取完繼續迴圈
:00481F4F 6A0F                    push 0000000F
:00481F51 B96C9C4800              mov ecx, 00489C6C
:00481F56 8D45DC                  lea eax, dword ptr [ebp-24]
:00481F59 BA07000000              mov edx, 00000007
:00481F5E E8EDFAFFFF              call 00481A50
:00481F63 8D45D8                  lea eax, dword ptr [ebp-28]
:00481F66 E87D21F8FF              call 004040E8
:00481F6B 8B45FC                  mov eax, dword ptr [ebp-04]     //eax=F03FEE63D7
:00481F6E E83524F8FF              call 004043A8
:00481F73 85C0                    test eax, eax
:00481F75 7903                    jns 00481F7A
:00481F77 83C007                  add eax, 00000007

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00481F75(C)
|
:00481F7A C1F803                  sar eax, 03
:00481F7D 48                      dec eax
:00481F7E 85C0                    test eax, eax
:00481F80 7C65                    jl 00481FE7
:00481F82 40                      inc eax
:00481F83 8945D0                  mov dword ptr [ebp-30], eax
:00481F86 C745D400000000          mov [ebp-2C], 00000000

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00481FE5(C)
|
:00481F8D 33DB                    xor ebx, ebx
:00481F8F 8D45EC                  lea eax, dword ptr [ebp-14]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00481FA7(C)
|
:00481F92 8B55D4                  mov edx, dword ptr [ebp-2C]
:00481F95 C1E203                  shl edx, 03
:00481F98 03D3                    add edx, ebx
:00481F9A 8B4DFC                  mov ecx, dword ptr [ebp-04]     //ecx=F03FEE63D7
:00481F9D 8A1411                  mov dl, byte ptr [ecx+edx]    //依次取F03FEE63D7各字元的hex送dl
:00481FA0 8810                    mov byte ptr [eax], dl
:00481FA2 43                      inc ebx
:00481FA3 40                      inc eax
:00481FA4 83FB08                  cmp ebx, 00000008    //如果超過8位,則只取前8位
:00481FA7 75E9                    jne 00481F92     //沒取完繼續迴圈
:00481FA9 8D45E4                  lea eax, dword ptr [ebp-1C]
:00481FAC 50                      push eax
:00481FAD 6A07                    push 00000007
:00481FAF 8D55EC                  lea edx, dword ptr [ebp-14]
:00481FB2 B907000000              mov ecx, 00000007
:00481FB7 33C0                    xor eax, eax
:00481FB9 E8EAFCFFFF              call 00481CA8
:00481FBE BB08000000              mov ebx, 00000008
:00481FC3 8D75E4                  lea esi, dword ptr [ebp-1C]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00481FDD(C)
|
:00481FC6 8D45CC                  lea eax, dword ptr [ebp-34]
:00481FC9 8A16                    mov dl, byte ptr [esi]      //依次取[esi]中的值送dl,93、FD、AF、96、1E、CE、A4、86、5A、DA、CB、A5、EE、73、06、6E
:00481FCB E80023F8FF              call 004042D0
:00481FD0 8B55CC                  mov edx, dword ptr [ebp-34]
:00481FD3 8D45D8                  lea eax, dword ptr [ebp-28]
:00481FD6 E8D523F8FF              call 004043B0
:00481FDB 46                      inc esi
:00481FDC 4B                      dec ebx
:00481FDD 75E7                    jne 00481FC6
:00481FDF FF45D4                  inc [ebp-2C]
:00481FE2 FF4DD0                  dec [ebp-30]
:00481FE5 75A6                    jne 00481F8D

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00481F80(C)
|
:00481FE7 8B45F4                  mov eax, dword ptr [ebp-0C]
:00481FEA 8B55D8                  mov edx, dword ptr [ebp-28]
:00481FED E84A21F8FF              call 0040413C
:00481FF2 33C0                    xor eax, eax
:00481FF4 5A                      pop edx
:00481FF5 59                      pop ecx
:00481FF6 59                      pop ecx
:00481FF7 648910                  mov dword ptr fs:[eax], edx
:00481FFA 6824204800              push 00482024

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00482022(U)
|
:00481FFF 8D45CC                  lea eax, dword ptr [ebp-34]
:00482002 E8E120F8FF              call 004040E8
:00482007 8D45D8                  lea eax, dword ptr [ebp-28]
:0048200A E8D920F8FF              call 004040E8
:0048200F 8D45F8                  lea eax, dword ptr [ebp-08]
:00482012 BA02000000              mov edx, 00000002
:00482017 E8F020F8FF              call 0040410C
:0048201C C3                      ret


                                                 李逍遙[cschina]
                                                    2003.07.06

相關文章