我和pcode的第一次――:) (5千字)
娃娃的CCG crackme3簡要分析(P-CODE型)
作者:bbbsl[iPB][FCG]
目標:娃娃的CCG CRACKME3
工具:WKTVBDebugger v1.3,exdec(以上工具在風飄學兄的站點有下載)
首先我得多謝master兄引我上路,要不到現在我還不知道怎麼弄P-CODE的東東,這兩天從風飄雪兄的網站下了幾個CRACKME,練習了一下,效果還不錯,這個可是我自己連猜帶蒙搞定的哦!!!哦,對了還要多謝好友upfeed每次耐心地聽我羅嗦及對我不吝其口舌的指點!!!還有一位很可愛的老朋友,儘管此君老大年紀了,居然還是和我一樣單身,哎,同病相憐啊,謝謝你老人家給予我信心!!!
順便說一句,我從開始學著用exdec和wktvbdebugger到搞定這個東東的演算法總共不到5小時,哇,這樣一看,pcode的入門也不是很難嘛,所以會pcode的高手一定很多,幫忙看看我的分析有啥不對的啦!多謝!
程式碼如下,用exdec反編譯的,哦,如果靜態分析有困難,可以用WKTVBDebugger,由於是在輸入的同時進行驗證,所以我們在EDIT上下斷點,方法:用WKTVBDebugger開啟crackme,點Form
Manager,拉下拉框選擇main,然後選擇TEXTBOX,下拉框選擇TEXT1,點BPX鈕,OK,現在按F5執行程式,在輸入框中輸入任何東東,立刻斷下來了:)於是到了這裡....
40EAAC: 04 FLdRfVar
local_00E0 ==>push address這玩藝過會存放字串的地址,
40EAAF:
21 FLdPrThis
==>這裡我懷疑是取程式本身的控制程式碼,不確定,請高手指點
40EAB0: 0f VCallAd
(object 2 ) ==>之所以有上面的懷疑是因為這裡wktvbdbg註釋為
==>main.text1,所以猜是呼叫某程式自身的函式
40EAB3: 19 FStAdFunc
local_00DC
40EAB6:
08 FLdPr local_00DC
40EAB9: 0d VCallHresult id
==>get_ipropTEXTEDIT 得到輸入字串
40EABE: 3e FLdZeroAd
local_00E0 ==>字串地址指標
40EAC1: 46 CVarStr
local_00F0 ==>複製指標到local_00F0
40EAC4: 04 FLdRfVar
local_0100 ==>push函式引數,WKTVBdbg走到這裡可以看
==>locao_0100+8所指代的記憶體,那是你輸入的東東
40EAC7: 0a ImpAdCallFPR4:
==>rtvTrimVar相當於what?VB高手告訴我這函式幹嘛用的
==>好嗎?
40EACC: 04 FLdRfVar
local_0100 ==>push字串
40EACF: Lead0/eb FnLenVar
==>得到字串長度
40EAD3: Lead1/f6
FStVar ==>將長度存到某處,哪裡我沒弄明白:(
40EAD7: 1a FFree1Ad
local_00DC
40EADA: 36 FFreeVar
==>free...
40EAE1: f4 LitI2_Byte:
0x1 1 (.) ==>push 1 as byte???
40EAE3: 04 FLdRfVar local_00D6
40EAE6: 04 FLdRfVar
local_00D4
40EAE9: 55 CI2Var
==>這裡應該是相當於計數器i了,當然是以剛才取的長度為...
40EAEA: Lead3/63 ForI2: (when done)
40EB5D==>靠,總算見著個確定的函式,for語句,都見過吧:)
40EAF0: 21 FLdPrThis
==>看看,又是一個,我剛才說過我的猜測了
40EAF1: 0f VCallAd
(object 2 ) ==>某函式???
40EAF4: 19 FStAdFunc
local_00DC
40EAF7: 28 LitVarI2: ( local_0100
) 0x1 (1)==>把常數1賦給local_0100,然後將此變數入棧
40EAFC: 6b FLdI2
local_00D6 ==>這裡是計數器i
40EAFF: e7 CI4UI1
==>似乎起符號擴充套件的作用,大夥看看
40EB00: 3e FLdZeroAd
local_00DC
40EB03:
Lead2/6f CVarAd
40EB07: 04 FLdRfVar
local_0110
40EB0A: 0a ImpAdCallFPR4:
==>這裡是rtcMidChar,這十幾行就是Mid$(str,i,1)
40EB0F: 04 FLdRfVar
local_0110
40EB12: Lead1/f6 FStVar
40EB16: 1a FFree1Ad local_00DC
40EB19: 36 FFreeVar
40EB20: 04 FLdRfVar
local_0094
40EB23: Lead2/fe CStrVarVal
local_00E0 ==>取得的字元地址入棧
40EB27: 0b ImpAdCallI2
==>call
rtcAnsiValueBstr,就是ASC$(char)
40EB2C: 44 CVarI2
local_0124 ==>字元的ASCII值
40EB2F: Lead1/f6 FStVar
40EB33: 2f FFree1Str
local_00E0
40EB36: 04 FLdRfVar
local_00B4 ==>這個應是返回值了
40EB39: 6b FLdI2
local_00D6 ==>噹噹噹....當!計數器i出現,幹什麼用呢?
40EB3C: 44 CVarI2
local_0124 ==>哇,取得的字元也出現了
40EB3F: Lead0/94 AddVar local_00F0
==>原來是加起來用啊
40EB43: Lead1/f6 FStVar
40EB47: 04 FLdRfVar
local_00A4 ==>這個東東是sum
40EB4A: 04 FLdRfVar
local_00B4 ==>這個東東是剛才的結果
40EB4D: Lead0/94 AddVar local_00F0
==>兩個東東加一起
40EB51: Lead1/f6 FStVar
==>放到local_00A4裡面去.哦哦...
40EB55:
04 FLdRfVar local_00D6
==>計數器i再次登場
40EB58: 64 NextI2:
(continue) 40EAF0==>是否繼續???
40EB5D: 04 FLdRfVar
local_00A4
==>剛才我說過的sum
40EB60: 28 LitVarI2:
( local_0124 ) 0x6e4 (1764)==>一個常數0x6e4
40EB65:
5d HardType
40EB66: Lead0/33 EqVarBool
==>兩者是否相等?
40EB68: 1c BranchF:
40EB94 ==>不等就錯誤了:)
40EB6B: 1b LitStr:
"恭喜你..."
40EB6E: 21 FLdPrThis
40EB6F: 0f VCallAd
(object 2 )
40EB72: 19 FStAdFunc
local_00DC
40EB75: 08 FLdPr
local_00DC
40EB78: 0d VCallHresult
禚d ==>put _ipropTEXTEDIT寫下幾句肉麻的話^_*
40EB7D: 1a FFree1Ad
local_00DC
40EB80: f4 LitI2_Byte:
0x0 0 (.)
40EB82: 21 FLdPrThis
40EB83: 0f VCallAd
(object 1 )
40EB86: 19 FStAdFunc
local_00DC
40EB89: 08 FLdPr
local_00DC
40EB8C: 0d VCallHresult
禚d
總結:
演算法如下:int
sum=0;int char,len;
gets(str);len=strlen(str);
for (int i=0;i<len;i++) sum+=(i+1+str[i]);
if
(sum==0x6e4) printf("Bingo,just so so");
呵呵,我就會弄些簡單的糊弄人,沒法,就這麼大本事,還請各位海涵....
附:反正得湊個數,沒什麼目的性,就當成序號產生器寫吧,其實寫的時候也是迷迷糊糊,儘量保證不出現特殊字元吧
int main(){
int i,len,sum=0;
char
str[20]="bbbsl";
clrscr();
gets(str);
len=strlen(str);
for (i=0;i<len;i++)
sum+=(str[i]+1+i);
if (sum>0x6e4) printf("error name");
else{
sum=0x6e4-sum;
do{
str[i]=0x41;
sum-=(0x42+i);
i++;
}while((sum-0x42-i)>0x40);
if (sum>0x7a+0x14) {
sum-=40;
str[i]=sum/2;
str[i+1]=sum-str[i]-1;
str[i+2]='\0';
}else{
sum-=20;
str[i]=sum;
str[i+1]='\0';
}
puts
(str);
}
return 0;
}
相關文章
- VB Pcode破解方法及例項 (5千字)2001-06-16
- blowfish大蝦,請問能否解決掉此pcode的NAG? (5千字)2001-04-26
- 四個簡單的VB6 PCODE的crackme的2 Nag, 2 Code的破解。 (5千字)2001-10-14
- 無名小兵V1.45
VB5 PCODE的破文一篇 (16千字)2002-07-06
- 我的破解心得(5) (16千字)2001-03-13
- EMEDITOR V3.0破解過程~~~~~呵呵~~~~~我第一次寫過程~~~~累死我了~~~~呵呵
(14千字)2001-01-11
- 課時1:我和python的第一次親密接觸2018-07-18Python
- 破解Don't Panic! 4.0(我又來了) (5千字)2001-06-22
- 我來寫一下LanSentry的解狗破解過程 (5千字)2002-01-19
- 我寫的一個記憶體補丁,很基本。。高手莫入。。
(5千字)2015-11-15記憶體
- 鬥地主 V3.0 Build 215 註冊碼破解(VB6-Pcode 形式) (4千字)2001-10-20UI
- IPTOOLS (5千字)2001-03-12
- 我的破解心得(1) (3千字)2001-03-13
- 我的破解心得(6) (3千字)2001-03-13
- 我的破解心得(8) (2千字)2001-03-13
- 我的破解心得(9) (4千字)2001-03-13
- 我的破解心得(11) (9千字)2001-03-13
- 我的破解心得(12) (1千字)2001-03-13
- 我的破解之路-BBOY (3千字)2000-07-21
- eXeScpe是不是有時間限制?第一次破解成功,請大俠們指點 (5千字)2001-02-09
- PolyView 破解 (5千字)2000-12-31View
- 破解MyMahj (5千字)2001-06-20
- 《VB PCODE程式破解綱要》 (987字)2001-12-30
- 2017,我的第一次年終總結2017-12-31
- 我喜歡暴力,暴力破解ssreader3.54的圖書閱讀.下載和1/4頁面限制! (5千字)2001-08-08
- 第一次衝刺計劃52024-05-02
- 《推箱子 202(275)破解》 ====>我們可以繼續玩了,哈! (5千字)2001-06-23
- jdpack的脫殼及破解 (5千字)2002-06-25
- 談談VB程式的破解 (5千字)2002-10-28
- 破解TurboLaunch 4.04 (5千字)2001-06-06
- 初學者(14) (5千字)2000-06-10
- WebZIP 3.71.508 (5千字)2000-06-24Web
- [分享]EmailKey2.0――我的第一次pj實錄2015-11-15AI
- 我的小木馬---server端---第一次編譯 (轉)2007-10-17Server編譯
- 盡力搶救win98,苦心分析我的破解入門5聞世了! (7千字)2001-02-26
- MD5的介紹,演算法和實現。 ――――娃娃/[CCG] (23千字)2001-11-04演算法
- 砸碎SLock, 我的一次破解.
(3千字)2015-11-15
- 記我第一次做線下技術分享的那些事2022-03-29