【原創】製作AUTOcad2002網路版的Flexlm license 時的另類pediy,純粹是玩,高手略過!
看雪資料發表於2015-11-15
製作AUTOcad2002中文網路版的Flexlm license 時的另類pediy,純粹是玩!
軟體名稱: AUTOcad2002中文網路版
應用平臺: Win2000
軟體類別: 地球人都知道
軟體介紹: 地球人都知道 Flexlm7.1f加密
破解工具: ollydbg 1.10(Fly修改版) ,w32Dasm_2002828_pll621,UltraEdit10.0,c32asm ,剩餘空間檢視器,PEditor
破解目的: 1.自動儲存“製作無限制使用license檔案的關鍵資料”到指定檔案
2.練習diy PE
3.熟悉暫存器的使用,如eax,[eax]....等,順便說一下心得。
破解過程:
通過這篇文章我們將向你介紹暫存器的使用的一些心得,如eax和[eax]區別,以及使用時方法,其實我也是剛明白
至於如何製作FlexLm的license見|http://bbs.pediy.com/showthread.php?s=&threadid=6562|,當然有些重複的我省略了
一、查詢關鍵的存放位置――――準備工作
廢話少說,接上回,我們找到了關鍵地方如下:
程式碼:
* Referenced by a CALL at Addresses: |:00945490 , :0094C1EA , :0094C7B0 , :0096383C , :00971159 |:00985C14 | :0094DB50 55 push ebp <====先在這個地方下斷 :0094DB51 8BEC mov ebp, esp :0094DB53 83EC30 sub esp, 00000030 :0094DB56 C745F08EB94876 mov [ebp-10], 7648B98E <====這個數在確定l_sg函式上很有用 :0094DB5D C745EC03000000 mov [ebp-14], 00000003 :0094DB64 8B4508 mov eax, dword ptr [ebp+08] :0094DB67 8B486C mov ecx, dword ptr [eax+6C] :0094DB6A 8B91D4010000 mov edx, dword ptr [ecx+000001D4] :0094DB70 81E200800000 and edx, 00008000 :0094DB76 85D2 test edx, edx :0094DB78 7423 je 0094DB9D :0094DB7A 833DC4DAB50000 cmp dword ptr [00B5DAC4], 00000000 :0094DB81 741A je 0094DB9D :0094DB83 8B4510 mov eax, dword ptr [ebp+10] :0094DB86 50 push eax :0094DB87 8B4D0C mov ecx, dword ptr [ebp+0C] :0094DB8A 51 push ecx :0094DB8B 8B5508 mov edx, dword ptr [ebp+08] :0094DB8E 52 push edx :0094DB8F FF15C4DAB500 call dword ptr [00B5DAC4] <====在這個地方下斷,之後就是我們要的! :0094DB95 83C40C add esp, 0000000C <====我們修改這個地方 :0094DB98 E913010000 jmp 0094DCB0
這時執行,中斷在0094DB50後,我們下,下面這些資料就是我們計算seed1和seed2的關鍵!
*************************
輸入 d [esp+8]
********
0012F608 00000004
0012F60C 1731E48D data[0]
0012F610 061711DA data[1]
0012F614 A3A37979
0012F618 CC926A64
0012F61C A1136749
0012F620 F174A41F
0012F624 00000000
輸入d [esp]
***********
0131B660 00000066
0131B664 0073001F
0131B668 AEF0D6A0 job+08
0131B66C A21343D5 job+0c
0131B670 C156EC2E job+10
0131B674 00000000
我們來儲存data[0],data[1],job+08,job+0c,job+10這5個資料到檔案!
我們不講為什麼是這5個資料(其實我也一知半解),我們只是用它來講解!
**********
首先我們來看esp和[esp]區別。輸入d esp和d [esp]你會看到資料視窗不同,廢話!
d esp你會看到一個地址,而他的內容或者說"值"就是"0131B660" !
就是說esp是指向地址"0131B660"
而地址0131B660的值是"00000066",
d [esp] 顯示的就是esp的值作為地址所指向地址0131B660的值!
比如你d 0131B660就和d [esp]是同樣的結果.
***********
而我們需要儲存的是0012F60C,0012F610,0131B668,0131B66C,0131B670地址的值
對應的就是:
0012F60C ==[esp+8]+4
0012F610 ==[esp+8]+8
0131B668 ==[esp]+8
0131B66C ==[esp]+0c
0131B670 ==[esp]+10
為了容易理解,我們用上面的來表示,當然這是不規範的!
我們的思路:把以上5個地址的內容在此刻(先儲存到我們指定的空間),然後寫到檔案裡
二、查詢剩餘空間:
推薦:剩餘空間檢視器: 作者:牛博威
Email: advice107@sina.com
用nbw寫的"剩餘空間檢視器"分析,部分結果如下:
******************************************
名稱 RVA OA 尺寸D 可寫否
.text 005e3a27 005e3a27 1497 否
.rdata 006b6c94 006b6c94 876 否
.data 0076089c 0076089c -415900 可
.rsrc 00771ad8 0070bad8 1320 否
有效剩餘空間(位元組D)為: 3693
******************************************
我們用.rdata段,就說從檔案偏移地址006b6c94開始,有876位元組可用空間。但是.rdata段為不可寫,無法利用這裡的空間宣告變數。不過不
要緊,用PEditor把這個節區屬性改成可寫便可以了(方法不羅嗦了,簡單)。事實證明,整個檔案中.rdata區段最後的剩餘空間可以被正確加
載(win2000),這供我們利用足夠了!
三、準備winapi函式
我們準備改造註冊主程式acad.exe,但是由於acad.exe輸入函式表裡沒有大部分winapi函式,不是他不呼叫而是反編譯後看不到函式名。但是
我們可以用peditor或者LordPE等工具找到winapi函式,再說即使沒有我們也可以新增!具體方法我不說了,看雪書裡有,找到如下:
KERNEL32.CreateFileA
FF1560479E00 call [009e4760]
*****************
KERNEL32.SetFilePointer
FF15A4489E00 call [009e48a4]
*****************
KERNEL32.WriteFile
FF15A8489E00 call [009e48a8]
*******************
這裡說一下call [009e4760]和call 009e4760不同,[009e4760]是指009e4760的值
四、修改工作
1.變數組織:我們需要用的變數就設在.rdata段006b6c94後面
6b6c96 : 儲存號碼的檔案地址.我們指定在C:\cad.txt裡,也可以其他,隨便了,不過不要太長!
6b6ca0 : WriteFile函式的一個引數,資料緩衝區。對我們來說沒用。不過不可少!
6b6cac : 檔案控制程式碼地址
6B6CB0 : 我們儲存的5個資料的儲存地方,每個分配8個位元組
6B6CD8 : 一個臨時的存放esp指標的地方
6b6ce0 : 我們的修改程式碼區
這是檔案偏移地址file offset,在使用中要轉換,具體參照看雪的書。
2.修改檔案,跳轉到我們的程式碼區
:0094DB8F FF15C4DAB500 call dword ptr [00B5DAC4] <====在這個地方下斷,之後就是我們要的!
:0094DB95 83C40C add esp, 0000000C <====我們修改這個地方,在esp改變前儲存他!
:0094DB98 E913010000 jmp 0094DCB0
0094DB95 E946911600 jmp ab6ce0
0094DB95 90 nop
0094DB96 90 nop
0094DB97 90 nop
不足處不上90,下面兩句後面補上。
add esp, 0000000C
jmp 0094DCB0
0094DB95跳到我們的程式碼,我們在.rdata段006b6c96開始我們的工作:
*********************************
00AB6CE0 8925 D86CAB00 mov [AB6CD8], esp <===此時的esp指標儲存在AB6CD8
為什麼要儲存esp指標呢? 因為是堆疊暫存器,在堆疊操作時要變化比如下面一句pushad,而我們需要的是此刻的esp,
只好儲存一下。這裡順便說一下,eax,ebx,edx,ecx是資料暫存器,
而esp,epb,esi,edi是指標及變址暫存器,因為我們在補丁程式時,
不可避免使用暫存器,這時我們最好使用eax,ebx,edx,ecx是資料暫存器,
否則可能會造成堆疊混亂,一點心得。
00AB6CE6 60 pushad <===所有的暫存器依次入棧,保持堆疊平衡,後面對應popad
00AB6CE7 A1 D86CAB00 mov eax, [AB6CD8] <===儲存在AB6CD8的關鍵esp指標,這裡有我們要的資料!!
00AB6CEC 90 nop
00AB6CED 36:8B58 08 mov ebx, [eax+8] <===相當於前面[esp+8]的地址,我們傳給ebx
00AB6CF1 83C3 04 add ebx,4 <===相當於來到前面[esp+8]+4的地址
00AB6CF4 36:8B0B mov ecx,[ebx] <===相當於前面[esp+8]+4的地址的值我們傳給ecx
00AB6CF7 890D B06CAB00 mov [AB6CB0], ecx <===相當於前面[esp+8]+4的值儲存在AB6CB0
為什麼這麼麻煩? 因為“mov [AB6CB0], [ebx]”這彙編命令不存在。
00AB6CFD 83C3 04 add ebx,4 <===相當於來到前面[esp+8]+8的地址
00AB6D00 36:8B0B mov ecx, [ebx] <===相當於前面[esp+8]+8的地址的值我們傳給ecx
00AB6D03 890D B86CAB00 mov [AB6CB8],ecx <===相當於前面[esp+8]+8的值儲存在AB6CB8
00AB6D09 36:8B18 mov ebx, [eax] <===相當於前面[esp]的地址,我們傳給ebx
00AB6D0C 83C3 08 add ebx,8 <===相當於來到前面[esp]+8的地址
00AB6D0F 36:8B0B mov ecx, [ebx] <===相當於前面[esp]+8的地址的值我們傳給ecx
00AB6D12 890D C06CAB00 mov [AB6CC0],ecx <===同上
00AB6D18 83C3 04 add ebx,4 <===相當於來到前面[esp]+0c的地址
00AB6D1B 36:8B0B mov ecx, [ebx]
00AB6D1E 890D C86CAB00 mov [AB6CC8],ecx
00AB6D24 83C3 04 add ebx,4 <===相當於來到前面[esp]+10的地址
00AB6D27 36:8B0B mov ecx, [ebx]
00AB6D2A 890D D06CAB00 mov [AB6CD0],ecx
這裡我們看到mov ecx, [ebx]和 mov ecx, ebx是不同,
前者[ebx]是的ebx地址的值給ecx,後者是ebx,相當於ecx=ebx複製!
00AB6D30 90 nop
00AB6D31 90 nop
00AB6D32 90 nop
00AB6D33 90 nop
00AB6D34 6A 00 push 0
00AB6D36 6A 02 push 2 ;FILE_ATTRIBUTE_HIDDEN,建立檔案時使檔案屬性為隱藏
00AB6D38 6A 04 push 4 ;OPEN_ALWAYS.如果不存在該檔案,則建立之
00AB6D3A 6A 00 push 0
00AB6D3C 6A 03 push 3 ;允許其他程式使用檔案(為了不發生意外,所以這樣設定)
00AB6D3E 68 000000C0 push C0000000
00AB6D43 68 966CAB00 push 00AB6C96 ; ASCII "C:\cad.txt"指向我們存檔檔案
00AB6D48 FF15 60479E00 call [009e4760] ; KERNEL32.CreateFileA
00AB6D4E A3 AC6CAB00 mov [AB6CAC],eax ;儲存檔案控制程式碼留給WriteFile用
00AB6D53 6A 02 push 2 ;FILE_END.設定檔案末尾
00AB6D55 6A 00 push 0
00AB6D57 6A 00 push 0 ;設定檔案指標為檔案末尾
00AB6D59 50 push eax ;檔案控制程式碼
00AB6D5A FF15 A4489E00 call [009e48a4] ; KERNEL32.SetFilePointer
00AB6D60 6A 00 push 0
00AB6D62 68 A06CAB00 push 00AB6CA0 ;WriteFile函式的一個引數,對我們來說沒用,不過不可少!
00AB6D67 6A 28 push 28 ;儲存的資料總長度,8x5=40位元組
00AB6D69 68 B06CAB00 push 00AB6CB0 ;儲存的資料開始地址
00AB6D6E 90 nop
00AB6D6F FF35 AC6CAB00 push [AB6CAC] ;前面儲存的檔案控制程式碼
這裡我們看到push [AB6CAC]和push AB6CAC是不同,前者是的地址的值給入棧,後者是地址,
00AB6D75 FF15 A8489E00 call [009e48a8] ; KERNEL32.WriteFile
00AB6D7B 61 popad <===所有的暫存器依次出棧,保持堆疊平衡
00AB6D7C 83C4 0C add esp,0C <===補上
00AB6D7F - E9 2C6FE9FF jmp 0094DCB0 <===補上,直接跳去
***********
完工!!
***********
用UltraEdit等工具寫acad.exe
這裡再說一下pll621的C32asm,絕對是好東東,雖然我習慣用W32dasm,但C32asm的彙編程式碼查詢器,絕對是好,我覺得可以拋棄hiew了,用C3
2asm的彙編程式碼查詢器寫彙編,然後再用16進位制編輯器如UltraEdit10把程式碼寫到檔案裡,再結合ollydbg 1.10除錯一下,美啊!我以上新增的
程式碼就是這樣的,幾乎一次成功(除了改幾個跳轉的程式碼)!感謝pll621提供的好東東。
開啟acad執行,然後用UltraEdit開啟"C:\cad.txt"我們存檔的檔案(紀事本開啟是亂碼)看到如下:
8D E4 31 17 00 00 00 00 DA 11 17 06 00 00 00 00
68 B6 31 01 00 00 00 00 D5 43 13 A2 00 00 00 00
2E EC 56 C1 00 00 00 00
為什麼和前面的不一樣?因為儲存都是高位在前,低位在後,堆疊!
你只要自己再到著抄一遍
1731E48D data[0]
0012F610 data[1] ..........略
當然有好事的可以編一段,重新排版,並且直接存為txt檔案格式。
五、最後
好累啊,其實這是我自己自找麻煩,高手們可以不必看。當時是為了破解cad2004時用的,因為她加了一個猛殼,沒法動態除錯。
最後也沒用上,因為關鍵點還沒找到,哎。雖然已經成功製作了cad2004的license,那是因為autodesk公司太傻!
寫出來,如果可以給初學pediy的一點幫助,我就知足了。
相關文章
- 製作AUTOcad2002中文網路版的Flexlm license2015-11-15Flex
- [原創]介面、類、抽象類、物件的另類解釋2008-03-23抽象物件
- 網路組網七類水晶頭製作方法,七類網線製作過程2020-06-08
- 網路直播:玩遊戲等於“創作”?2019-08-07遊戲
- 另類網路層設計2018-02-05
- 簡單純粹2024-05-18
- 《鬼鬥》Steam: “純粹”的格鬥遊戲2020-06-04遊戲
- 【玩壞 MV】製作音遊的思路過程(2)2020-09-23
- 【玩壞 MV】製作音遊的思路過程(1)2020-09-10
- 【玩壞 MV】製作音遊的思路過程(3)2020-09-30
- Polygon 年度遊戲之《巴巴是你》:解讀純粹的遊戲樂趣2019-12-16Go遊戲
- [原創]解決了一個另類的輸入法不起作用的問題2008-02-15
- Highcharts 7.1.1 釋出,製作圖表的純 JS 類庫2019-04-11JS
- 讀js純粹筆記2019-03-10JS筆記
- Java 太笨?純粹誹謗2013-07-01Java
- 讓自己純粹一點2024-06-05
- 使用純粹的JS構建 Web Component2017-12-15JSWeb
- 純文科屌絲的移動網際網路創業夢2013-05-30創業
- 網頁製作時可以拿起就用的網頁製作小技巧總結2019-01-14網頁
- 網際網路創業原創精品?2014-06-18創業
- 如何在python的字串中輸入純粹的{}2018-08-22Python字串
- 奧巴馬籌款網站的製作過程2012-12-14網站
- 《12分鐘》:一款另類的時間迴圈遊戲是怎樣做成的?2021-05-21遊戲
- 在程式設計中體驗純粹的快樂2015-11-09程式設計
- 純CSS製作液晶屏的顯示效果2015-04-01CSS
- 網站製作過程中把握的幾點2012-02-12網站
- 日本遊戲製作學校探秘(原創) (轉)2007-11-05遊戲
- 國產單機遊戲的未來,只能是創意小製作嗎?2019-05-07遊戲
- 製作遊戲的遊戲:創作樂趣的樂趣2020-03-09遊戲
- 製作Compuware.SoftIce.Driver.Suite.3.0.1.StinkyD的license (5千字)2015-11-15UI
- Nix:一個純粹的函式式包管理器2022-02-20函式
- 廣告創作也要講原則的!2018-10-23
- 純css製作loading動畫2018-04-02CSS動畫
- OALD10 牛津高階十版是如何製作的?2024-10-08
- 網際網路創業怎麼起步?這個文章教你玩轉網際網路創業。2021-08-25創業
- 作業系統中轉換身份的另類方法(runas)(轉)2007-08-11作業系統
- 源頭免疫 作業系統防病毒的另類高招(轉)2007-08-12作業系統
- 網站的初步製作2017-11-12網站