噹噹蝦和豆豆蝦crackcode突破25位限制的分享筆記 (9千字)
各位大蝦好:
我是噹噹蝦,對了,那外號為"豆豆蝦"的是我非常好的網友,最近他從事銷售
要出遠門,跑客戶,所以不會常來,我暫時接替他。他一句話:都是為了生活。
生活本來就是很亂,的確啊!還是古人云的好:生活本來就是一團麻繩,理也理不清。
呵呵~~~但是有一點是使我本人都很欣慰的事情:很開心,而且有空的時間可以做
自己喜歡的事,一句話"走自己的路,讓別人羨慕去吧!"(據說,這句話是出自一位
crack老前輩對新生輩出年代的詢詢教誨! )
話說回來,想當初我的好友"豆豆蝦",一來看雪論壇就"炸"道,我想也許是有
兩點原因在這裡解釋一下:
1、無論如何,人都是有虛榮心,想出點小名很正常,其實一個主要原因想得到別人的認
可。我本人比較欣賞透過自己的實力去得到別人的認可。
2、"炸"道本身諧音,有點標新立異,其根本的就是在眾目睽睽下,想吸引別人的注意。
芸芸眾生過往雲煙。所以啊!比如這一招式,在追女仔中非常常見,好好體會和掌握吧!
哈哈~~~ 我和"豆豆蝦"都是光有理論無實踐。 估計有人要吐啦。。。。哈哈~~
我噹噹蝦在這表示歉意。此次的目的,是想把"炸壞的道路給修一修",
"將功補過"吧!豆豆蝦曾經把修改crackcode的過程講述過,經過我的再跟蹤,寫寫湊湊
一番,"文物"得以出土問世。哈哈~~~~
【如何突破crackcode的25位限制】
1、突破crackcode的25位限制的經過
在論壇中,有一些貼子常提到crackcode存在25位的限制。可是rufeng又隱退江湖,
(江湖盛傳他可能在修煉內功,準備東山再起)。於是好友豆豆蝦(學過一點彙編,知道
一些常用工具的使用),凡心欲動,本意是想一一步分析,對程式碼原理有個總的瞭解。
然後再對證下藥。所謂手到病除。他說如果一一分析下去,也許在作修改的時候,就不
會在一個資料結構上兜圈子,當時猜想rufeng是定義一個25位的字元陣列,沒有考慮到
獲得的結果會超過25位的情況。 【爆破,可以採取直搗黃龍;作序號產生器,得看懂整個註冊
碼;修改程式碼,得看懂程式的實現原理,然後再OEM自己的思路。】
2、為什麼crackcode存在25位限制(打算介紹簡單些,因為它牽扯到的面比較廣)
crackcode呼叫getthreadcontext函式,返回一個結構指標,利用其讀取被跟蹤
程式的暫存器(eax、edx...)中的值(這個函式的功能非常的棒)。rufeng巧妙的應用
了六個暫存器(Edi,Esi,Ebx,Edx,Ecx,Eax),返回它們註冊碼,一個暫存器
只能存4個字元,所以6*4=24,確切的說,crackcode取到的字元長度不能超過24個。
比如EAX=44324432--->儲存"D2D2"四個字元。
3、如何突破它的限制??
如果把程式通讀一遍,似乎發現沒有辦法去突破這個限制,因為這是設計上的
失誤。如果細細去琢磨crackcode,會發現它兩次呼叫getthreadcontext函式。其實第
一次的時候,就可以得到要讀取註冊碼的地址。根據crackcode.ini中Save_Code_Address
的值,對應暫存器儲存的值。為什麼crackcode要去兩次呼叫getthreadcontext函式,其中
的奧秘,把程式認認真真的通讀幾遍(讀到凌晨4點,窗外一片寂寂。在路燈下,幾個清潔
工的身影,默默無聞的清洗大地,在我們匆匆來往的街道,還以清爽的感覺。)
好了!上面既然第一次呼叫的時候,已經能確定註冊碼的位置,何不拿它示問。於是可以
呼叫ReadProcessMemory,把註冊碼得到。
4、修改程式(程式碼修改位置401448---40149B)
我這有豆豆蝦修改時的草稿:
=========判斷save_code_address需要讀取的暫存器===========
----deal with ebp----
mov ebx,40a64c -------crackcode對save_code_address處理後存放的地址
mov ecx,40a1cc
mov al,byte ptr [ebx]
cmp al,0f5 -------為什麼要進行這樣比較,crackcode程式碼分享筆記(三)中
有講述。我把相關的部分放在附錄中。
je final
----deal with eax----
sub ecx,4
cmp al,0f0
je final
----deal with ecx----
sub ecx,4
cmp al,0f1
je final
----deal with edx----
sub ecx,4
cmp al,0f2
je final
----deal with ebx----
sub ecx,4
cmp al,0f3
je final
----deal with esi----
sub ecx,4
cmp al,090
je final
----deal with edi----
sub ecx,4
//cmp al,0f7
==================================
==========以下為從記憶體中讀取註冊碼,並顯示========
final:
---deal with mem---
push 0
push 28 //size
push 409B80 //buffer ======緩衝區
push d,[ecx] //baseaddr ======存放註冊碼的地址。
push d,[40a410] //hprocess
call d,[405024] ====呼叫ReadProcessMemory.從存放註冊碼的地址讀入緩衝區
---deal with mem---
display:
mov ebx,409B80 ===顯示緩衝區
jmp 40149c
結束語:所有的人都恐懼孤獨,但唯有在孤獨之中,我們才能學會了解自己,學習如何處理
我們自己永恆的孤獨。 :)
【爆破,可以採取直搗黃龍;作序號產生器,得看懂整個註冊碼;
修改程式碼,得看懂程式的實現原理,然後再OEM自己的思路。】
噹噹蝦
耗時:6小時
2001年8月24日 18:07
附錄:
* Possible StringData Ref from Data Obj ->"EAX"
|
:004011A7 68AC614000 push 004061AC
:004011AC 56
push esi --》"Save_Code_Address"
:004011AD E81E080000 call 004019D0
:004011B2 59
pop ecx
:004011B3 85C0
test eax, eax
:004011B5 59
pop ecx
:004011B6 7511
jne 004011C9
:004011B8 C605609740008B mov byte ptr [00409760],
8B
:004011BF C7054CA64000F0909090 mov dword ptr [0040A64C], 909090F0
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004011B6(C)
|
* Possible StringData Ref from Data Obj ->"EBX"
|
:004011C9 68A8614000 push 004061A8
:004011CE 56
push esi
:004011CF E8FC070000 call 004019D0
:004011D4 59
pop ecx
:004011D5 85C0
test eax, eax
:004011D7 59
pop ecx
:004011D8 7511
jne 004011EB
:004011DA C605609740008B mov byte ptr [00409760],
8B
:004011E1 C7054CA64000F3909090 mov dword ptr [0040A64C], 909090F3
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004011D8(C)
|
* Possible StringData Ref from Data Obj ->"ECX"
|
:004011EB 68A4614000 push 004061A4
:004011F0 56
push esi
:004011F1 E8DA070000 call 004019D0
:004011F6 59
pop ecx
:004011F7 85C0
test eax, eax
:004011F9 59
pop ecx
:004011FA 7511
jne 0040120D
:004011FC C605609740008B mov byte ptr [00409760],
8B
:00401203 C7054CA64000F1909090 mov dword ptr [0040A64C], 909090F1
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004011FA(C)
|
* Possible StringData Ref from Data Obj ->"EDX"
|
:0040120D 68A0614000 push 004061A0
:00401212 56
push esi
:00401213 E8B8070000 call 004019D0
:00401218 59
pop ecx
:00401219 85C0
test eax, eax
:0040121B 59
pop ecx
:0040121C 7511
jne 0040122F
:0040121E C605609740008B mov byte ptr [00409760],
8B
:00401225 C7054CA64000F2909090 mov dword ptr [0040A64C], 909090F2
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040121C(C)
|
* Possible StringData Ref from Data Obj ->"EDI"
|
:0040122F 689C614000 push 0040619C
:00401234 56
push esi
:00401235 E896070000 call 004019D0
:0040123A 59
pop ecx
:0040123B 85C0
test eax, eax
:0040123D 59
pop ecx
:0040123E 7511
jne 00401251
:00401240 C605609740008B mov byte ptr [00409760],
8B
:00401247 C7054CA64000F7909090 mov dword ptr [0040A64C], 909090F7
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040123E(C)
|
* Possible StringData Ref from Data Obj ->"ESI"
|
:00401251 6898614000 push 00406198
:00401256 56
push esi
:00401257 E874070000 call 004019D0
:0040125C 59
pop ecx
:0040125D 85C0
test eax, eax
:0040125F 59
pop ecx
:00401260 7511
jne 00401273
:00401262 C6056097400090 mov byte ptr [00409760],
90
:00401269 C7054CA6400090909090 mov dword ptr [0040A64C], 90909090
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401260(C)
|
* Possible StringData Ref from Data Obj ->"EBP"
|
:00401273 6894614000 push 00406194
:00401278 56
push esi
:00401279 E852070000 call 004019D0
:0040127E 59
pop ecx
:0040127F 85C0
test eax, eax
:00401281 59
pop ecx
:00401282 7511
jne 00401295
:00401284 C605609740008B mov byte ptr [00409760],
8B
:0040128B C7054CA64000F5909090 mov dword ptr [0040A64C], 909090F5
====以上程式是對處理Save_Code_Address不同值,做相應的處理======
相當於
switch( Save_Code_Address )
{
case 'EAX':
code1=8B;
code2=909090F0;
break;
case 'EBX':
code1=8B;
code2=909090F0;
break;
case 'EC':
code1=8B;
code2=909090F0;
break;
case 'EDX':
code1=8B;
code2=909090F0;
break;
case 'EDI':
code1=8B;
code2=909090F0;
break;
case 'ESI':
code1=90;
code2=909090F0;
break;
case 'EBP':
code1=8B;
code2=909090F0;
break;
}
相關文章
- crackcode程式碼分享筆記(一) (8千字)2001-08-09筆記
- 蝦扯蛋之函式防抖和節流2018-07-11函式
- blowfish大蝦,請問能否解決掉此pcode的NAG? (5千字)2001-04-26
- 蝦米窮逼 VIP 事件回顧和由此引發的思考2019-03-03事件
- 2018自我總結(小蝦米)2018-12-27
- 蝦扯蛋之條件判斷的極致優化2018-12-07優化
- 問一個jdbc和oracle字符集問題?請大蝦救命2002-11-17JDBCOracle
- Glide核心設計一:皮皮蝦,我們走2017-02-21IDE
- 新增RSS訂閱到Google、鮮果、抓蝦 等2012-06-27Go
- 這樣的CMS如何製作!大蝦們給點思路!2008-09-19
- oracle 9i 突破win2003記憶體限制2011-08-30Oracle記憶體
- 逮蝦戶!Android程式除錯竟簡單如斯2018-12-07Android除錯
- 騰訊大戰阿里:微信再封殺蝦米音樂2015-02-04阿里
- 老蝦解讀專案管理之整體管理 (轉)2007-08-14專案管理
- 哪位大蝦對移動代理的Aglet平臺有研究啊!~~~2003-11-29
- [外掛擴充套件]蝦米音樂電臺外掛2019-05-11套件
- 求救各位大蝦ofbiz2.1釋出到jboss32006-05-18S3
- c美團App開始內測“短視訊”入口和編輯工具“美團皮皮蝦”2022-02-28APP
- 請教大蝦:有關JComboBox控制元件的焦點問題?2004-08-19控制元件
- 請教資料庫併發訪問的問題!望各位大蝦指點!2006-04-24資料庫
- 請教各位大蝦:在JBoss下使用JMS通訊機制遇到的問題2006-12-30
- 關於在linux中顯示漢字的問題請教大蝦(轉)2007-08-11Linux
- 問一個oracle jdbc url的設定字符集的問題,請大蝦救命。2002-11-17OracleJDBC
- 某人的oracle9i學習筆記,與大家分享(zt)2006-09-21Oracle筆記
- 好多人問我如何轉換機器碼,今天我來寫心得了......(請大蝦指點改進的地方) (6千字)2015-11-15機器碼
- QQ音樂新版本功能深度測評:對比蝦米和網易雲誰更勝一籌?2018-11-09
- VB輸入限制的記憶體破解 (2千字)2003-04-28記憶體
- 突破oracle for win2K的2G記憶體限制2006-04-28Oracle記憶體
- 印象筆記 --- 方法分享筆記2018-11-22筆記
- 各位大蝦和banq大哥請問把所有資料庫操作都放在儲存過程裡合理嗎?2006-07-19資料庫儲存過程
- 請給位大蝦幫忙解決一個log4j問題,急2003-10-21
- oracle 9i 32位系統 使用VLM 突破SGA 1.7G限制2016-01-26Oracle
- 突破oracle for win2K的2G記憶體限制 (轉)2007-08-16Oracle記憶體
- Javabase筆記分享2024-10-30Java筆記
- 蝦米音樂“窮X”事件程式設計師致歉:以後老實寫程式碼2017-11-21事件程式設計師
- 程式設計師修仙之路--突破記憶體限制的高效能排序2019-03-16程式設計師記憶體排序
- 噹噹無線16年首頁改版設計分享2016-06-30
- 2019年國內雲建設產業規模有望超過小龍蝦的產業規模2019-08-23產業