ㅜ 8ㄐ Visual Basic〻ᒿ
༦᱄φᵢ⭫ᆆᮽẙᱥɅࣖᇼф䀙ᇼ�ㅢп⡾�ɆⲺ䞃ྍ䖻ࣟ⭫ᆆᮏぁέ⭫ᆆᐛѐ࠰⡾⽴ד⌋ሯ
ᵢ֒ӡᴿщᴿ࠰⡾ᵹȾԱᵠ㔅ᵹӰҜ䶘䇮ਥθགྷȽ䬶ᡌ䙐䗽ؗᚥ㖇㔒Ֆᵢ֒
Ⲻ㺂Ѱχ↠ᴨȽ㈗᭯Ƚࢳスᵢ֒Ⲻ㺂Ѱθൽ䘓ਃɅѣӰ≇ާૂള㪍֒ᵹ⌋Ɇθެ㺂ѰӰ
ᓊᢵᓊⲺ≇Ӂ䍙Աૂ㺂᭵䍙Աθᶺᡆ⣥㖠Ⲻθሼ㻡ד⌋䘳ガࡇӁ䍙ԱȾ
ѰҼ㔪ᣚᐸ൰〟ᓅθؓᣚᵹӰⲺਾ⌋ᵹⴀθᡇ⽴ሼד⌋ḛ༺ૂᢉ࠱ᵹⴍ⡾Ⲻঋփૂ
ѠӰȾ⅘䘄⽴Ր⮂Ӱ༡〥ᶷѴᣛᵹⴍ⡾㺂Ѱθᵢ⽴ሼྌࣧѴᣛᴿࣕӰθᒬؓ䇷ѴᣛӰ
Ⲻؗᚥу㻡⋺䵨Ⱦ
Ѵᣛ⭫䈓φδ���ε��������χδ���ε��������
Ֆ ⵕφδ���ε��������
(�PDLOφ GETT#SKHL�FRP�FQ
䙐ؗ൦൶φ्Ӣᐸнስ䐥 ��� ؗ
⭫ᆆᐛѐ࠰⡾⽴ᙱ㕌ࣔޢᇚ
䛤 㕌φ������
加密与解密(第三版) www.pediy.com 2
8.5 WKTVBDebugger䈹䈋ᐛޭ
ྲ᷌⭘W32Dasm৽≷㕆алݹⴈᨀⲴ vbpcode.exe〻ᒿˈሶՊⴻࡠ㧛ަ࿉Ⲵԓ⸱ˈ
ഐѪᆳнᱟՐ㔏ѹкⲴ≷㕆ԓ⸱Ҷˈਚᴹ⭘ P-code ৽㕆䈁ಘ㜭ᗇࡠ↓⺞Ⲵԓ⸱DŽ
VB5/VB6 Ⲵ P-code ৽㕆䈁ಘ⧠൘ᴹ ExdecˈWKTVBDEˈVBDE ㅹDŽSmartCheck 㲭㠚〠н
᭟ᤱ P-code〻ᒿˈնҏਟѪ䖵ࣙ䈳䈅ᐕާDŽ
WKTVBDEᱟаⅮᔪ・൘ ExdecสкⲴࣘᘱ䈳䈅ᐕާˈᵜ 㢲ԕ↔ᐕާѪֻӻ㓽ྲօ䈳
䈅 P-codeⲴ〻ᒿDŽ
1κᆿ㻻
ᢗ㹼WKTVBDEѫ᮷Ԧቡ㜭ᆼᡀᆹ㻵DŽն䘈ᴹࠐњᯩ䶒㾱⌘алDŽ
� ሶⴞḷ䖟Ԧ༽ࡦࡠWKTVBDebuggerᆹ㻵ⴞᖅ䟼䈳䈅ˈণо Loader.exe਼аⴞᖅ˗
� ሶᆹ㻵ⴞᖅⲴWKTVBDE.dll᮷Ԧ༽ࡦࡠ㌫㔏ⴞᖅ䟼˗
� ሶMSVBVM60.DLLᴯᦒᡀ 2003ᒤԕࡽ⡸ᵜDŽ
� ྲ᷌㻵䖭䘈ᱟཡ䍕ˈ䈧䈅⵰ޣ䰝аӋᓄ⭘〻ᒿˈྲ VB㕆䈁ಘǃWordㅹ〻ᒿDŽ
2κ⮂䶘
䘀㹼WKTVBDEਾˈঅࠫ㨌অ File/Open ᢃᔰ vbpcode.exe〻ᒿˈሶࠪ⧠മ 8.7ᡰ⽪
ⲴデਓDŽྲ᷌ᨀ⽪ Can NOT find a ENGINE section for the DLL. ѻ㊫Ⲵؑˈ䈧৲㘳ᆹ㻵
а㢲ഐDŽ
䈤᰾˖ᵜㇷ᮷ẓᱟሩlj࣐ᇶо䀓ᇶNJㅜй⡸ ㅜ 8ㄐ Visual Basic〻ᒿ 㺕ݵˈѪҶ
䱽վҖⲴԧṬˈⴤ᧕ԕ⭥ᆀ᮷ẓᨀ㔉മҖ䍝Ҡ㘵DŽ
看雪软件安全网站
http://www.pediy.com
kanxue
2008-6-1
第 8章 Visual Basic 程序 3
മ 8.7 WKTVBDEᢃᔰ〻ᒿਾ
অࠫ㨌অ Action/Run 㻵䖭〻ᒿDŽѫデਓ⭡ 3њสᵜ䜘࠶㓴ᡀ˖ԓ⸱˄Disassembly ǃ˅
ᰕᘇ˄Log˅ԕ৺ึḸ˄Stack˅デਓˈྲമ 8.8ᡰ⽪DŽ
˄1˅ԓ⸱デਓ
䘉њデਓᱮ⽪ᖃࡽᢗ㹼〻ᒿⲴ৽≷㕆՚ԓ⸱DŽᤷԔṬᔿྲл˖
XXXXXXXX:XXᤷԔ
ަѝ XXXXXXXX ᱟᤷԔⲴᆈ㲊ᤏൠ൰ˈ䐏⵰Ⲵєњᮠᆇᱟԕॱޝ䘋ࡦṬᔿᱮ⽪
Ⲵᵪಘ⸱DŽ⌘ˈਚᴹㅜањᵪಘ⸱㻛ᱮ⽪Ҷˈਾ䶒Ⲵᱟ P-code ᤷԔ˄Պṩᦞਈ䟿઼㠚ਈ
䟿Ⲵн਼㘼н਼ DŽ˅ਖཆˈ൘䈕デਓѝঅࠫ啐ḷਣ䭞ሶᢃᔰભԔ㨌অDŽ
˄2˅ᰕᘇデਓ
ᖃ〻ᒿᢗ㹼ᰦˈᱮ⽪〻ᒿᡰᴹਈ䟿Ⲵ઼ؑᨀ⽪⎸DŽᡰԕᖃ䐏䑚䈳䈅ᰦˈ⌘䘉њデਓ
ᱟᖸ䟽㾱ⲴDŽᆳሶᨀаӋᴹԧ٬Ⲵؑˈᴰ 䟽㾱Ⲵᱟ ᆳˈሶᱮ⽪ᖃࡽᤷԔᢗ㹼ᰦᡰ䘋㹼ⲴDŽ
ԓ
⸱
デ
ਓ
ᰕ
ᘇ
デ
ਓ
ึḸデਓ
മ 8.8 WKTVBDEѫデਓ
加密与解密(第三版) www.pediy.com 4
˄3˅ึḸデਓ
ึḸデਓᴹࠐњ⁑ᔿ˖ᆇ㢲ǃᆇᡆৼᆇDŽ䙊䗷䘹ᤙঅ䘹Ṷ EBP ઼ ESPˈԕн਼ᖒᔿᤷ
ੁึḸˈєњሬ㡚᤹䫞˖Prev ઼ Next ਟԕ㘫亥DŽP-code 䘀㹼ᴹ࡛ҾՐ㔏Ⲵ CPU 㔃ᶴˈՐ
㔏Ⲵ CPU ᢗ㹼䎆Ҿᇴᆈಘ઼ึḸˈ㘼 P-code ਚ֯⭘ึḸˈᡰԕึḸデਓ䶎ᑨ䟽㾱ˈ
ᤷԔ䜭䙊䗷ึḸᶕӔᦒᮠᦞDŽ
˄4˅ѝ䜘⣦ᘱḿ
ѝ䜘⣦ᘱḿᨀҶ䶎ᑨᴹ⭘Ⲵؑ˄㿱മ 8.9 DŽ˅
മ 8.9 ѝ䜘⣦ᘱḿ
� Op˖ᱮ⽪ᖃࡽᤷԔⲴᆼᮤᵪಘ⸱˗
� File Offs˖ᱮ⽪ᖃࡽᤷԔⲴ᮷Ԧٿ〫ൠ൰˗
� ᴰл䶒Ⲵањ᮷ᵜṶ˖ᱮ⽪Ⲵᱟ Form1!00402240 ˈ 㺘⽪ᖃࡽᤷԔⲴデփᡆ⁑ඇⲴ
〠˗
� Edit ᤹䫞˖ᱟᆈ㕆䗁ಘⲴᘛᦧ᤹䫞ˈঅࠫ䈕᤹䫞ሶᢃᔰᆈ㕆䗁ಘˈᆳՊӾᖃࡽ
ᤷԔൠ൰༴ᱮ⽪ᆈᮠᦞDŽ
˄5˅ᓅ䜘᤹䫞ḿ
ᓅ䜘Ⲵ᤹䫞ᐕާḿᨀྲлࠐњભԔDŽ
� Save Source˖؍ᆈԓ⸱デਓⲴᇩ˗
� Save Messages˖؍ᆈᰕᘇデਓⲴᇩ˗
� Clear Messages˖䲔ᰕᘇデਓⲴ䇠ᖅ˗
� Help˖ᢃᔰᑞࣙ᮷Ԧ˗
� Form Manager˖ᢃᔰデփ㇑⨶ಘ˗
� Advanced Info˖ᱮ⽪ޣҾ P-code᮷ԦⲴ儈㓗ؑǃ⁑ඇǃ㊫઼デփDŽ
˄6˅ח䶒Ⲵ᤹䫞
ח䶒Ⲵ᤹䫞䟼䜭ᱟаӋо䈳䈅ಘᴹޣⲴ࣏㜭᤹䫞DŽ
� Memory Dump (Ctrl+M)˖ᢃᔰᆈ㕆䗁ಘ˗
� Loaded Module Symbols˖ᱮ⽪ㅖਧؑሩ䈍Ṷ˗
� String.Refs(Ctrl+S)˖ᱮ⽪Ѣᔿ৲㘳˗
� Step Trace (F8)˖ᖃҾ SoftICEⲴ TભԔˈਟԕ䐏ޕ CALL䟼˗
� Trace Ret (F12)˖ᖃҾ SoftICEⲴ P RET ભԔ˗
� Trace Over (F10)˖অ↕䐏䑚ˈᖃҾ SoftICEѝⲴ P ભԔ˗
� Trace X (F6)˖ᢗ㹼ᤷᇊ㹼ᮠⲴᤷԔ˗
� API (CTRL+B)˖ᱮ⽪ Exported VM Functions デਓ˗
� Opcode (Ctrl+O)˖ᱮ⽪ Opcodes Control Dialog デਓ˗
� On Execution (Ctrl+E)˖ᱮ⽪ Current BPX List デਓDŽ
˄7˅ᆈ㕆䗁ಘ
᤹ Ctrl+M䭞ᢃᔰᆈ㕆䗁ಘ˄㿱മ 8.10 DŽ˅ᐖデਓᱮ⽪ᆈᮠᦞˈਣデਓᱮ⽪ሩᓄⲴ㲊
第 8章 Visual Basic 程序 5
ᤏᵪԓ⸱DŽ
മ 8.10 ᆈ㕆䗁ಘ
� Address to Jump˖䗃ޕ㻛ᱮ⧠Ⲵᆈൠ൰DŽ᤹䫞 Clear List䲔ൠ൰ࡇ㺘DŽ᤹䫞 <<
઼ >> ݱ䇨൘ᆈඇѝ㘫亥˄256њᆇ㢲 DŽ˅
� Dump to File˖ሶᤷᇊབྷሿⲴᮠᦞᣃਆࡠ᮷ԦDŽ
� Search˖ݱ䇨൘ањᤷᇊⲴᆈ㤳ത䟼ᩌ㍒ᮠᦞᆇ⇥ˈਟԕᱟॱޝ䘋ࡦᮠᦞǃASCII
ᡆWideCharṬᔿDŽ
˄8˅ㅖਧؑḕⴻಘ
অ᤹ࠫ䫞 Loaded Module Symbols ᢃᔰㅖਧؑḕⴻಘ˄㿱മ 8.11˅ˈ 䈕ሩ䈍Ṷᱮ⽪
Ҷ〻ᒿ䈳⭘Ⲵн਼⁑ඇDŽ
മ 8.11 ㅖਧؑḕⴻಘ
᭟ᤱⲴㅖਧ䈳䈅᮷Ԧᴹ COFFˈPDB ㅹDŽިරⲴቡᱟ DBG ᮷Ԧˈ䴰㾱ᰦሶޣⲴㅖਧ
᮷Ԧ༽ࡦࡠWKTVBDEⲴ DBGᆀⴞᖅ䟼DŽ൘ԫօᰦىঅࠫ Load/Unloadˈㅖਧቡ㜭ཏ㻛࣐
䖭/ন䖭ˈаᰖ࣐䖭Ҷቡ⋑ᗵ㾱䟽ᯠ࣐䖭DŽ䇠տˈ࣐䖭ㅖਧਟ㜭Պᱟањᖸ╛䮯Ⲵ䗷〻ˈᡰԕ
加密与解密(第三版) www.pediy.com 6
㾱ㅹࡠ⣦ᘱḿᱮ⽪Ѫ Ready⣦ᘱDŽ
注意:在光盘提供的WKTVBDE版本中,按钮 Find ByAddress 不能正确工作。
˄8˅Ѣᔿ৲㘳
᤹ Ctrl+S䭞ᢃᔰѢᔿ৲㘳デਓ˄㿱മ 8.12 DŽ˅䈕ሩ䈍Ṷᱮ⽪Ҷᖃࡽ䘋〻ѝⲴᡰᴹᆇㅖѢDŽ
অࠫ Save ᤹䫞ਟԕ؍ᆈޘ䜘ⲴᆇㅖѢDŽঅࠫᆇㅖѢˈਟԕḕⴻᓄᆇㅖѢ൘ᆈѝⲴൠ
൰DŽ֯⭘ᆈ㕆䗁ಘҏਟԕ㕆䗁ᆇㅖѢDŽ
മ 8.12 Ѣᔿ৲㘳デਓ മ 8.13 Ӕ৹৲㘳デਓ
˄9˅Ӕ৹৲㘳デਓ
অࠫ Analize BranchX ᤹䫞ᢃᔰӔ৹৲㘳デਓ˄㿱മ 8.13 DŽ˅䈕デਓᱮ⽪ᖃࡽ䘋〻Ⲵ
ᡰᴹ䐣䖜Ⲵս㖞ˈਟṩᦞᛵߥ䇮㖞ᯝ⛩DŽਟԕ൘ԫօ䐣䖜кᘛ䙏ൠ䇮ᇊᯝ⛩ˈ൘㾱䇮ᇊᯝ⛩
Ⲵ䐣䖜кঅࠫ啐ḷਣ䭞ˈ൘ᕩࠪⲴ㨌অ䟼䘹ᤙ enable/disable the breakpoints ભԔᶕ䇮ᇊᡆ
ਆ⎸ᯝ⛩DŽ
3κ䇴㖤ᯣ⛯
൘ԓ⸱デਓ䟼ਟԕⴤ᧕ৼࠫ啐ḷᡆ⭘啐ḷਣ䭞䇮㖞ᯝ⛩DŽ
˄1˅൘㲊ᤏᵪ API࠭ᮠબਛк䇮ᯝ⛩
᤹ Ctrl+B䭞ᢃᔰ Breakpoints on VMAPI calls デਓ˄㿱മ 8.14 DŽ˅
䈕ሩ䈍Ṷᱮ⽪Ҷᡰᴹ䙊䗷㲊ᤏᵪ DLL 㻛ሬࠪⲴ࠭ᮠࡇ㺘DŽBP ࡇᤷࠪҶ〻ᒿൠ൰ˈOrd
ࡇᤷࠪ㻛ሬࠪⲴ࠭ᮠᒿᮠˈName ᤷࠪ࠭ᮠDŽ൘ൠ൰ᯱ䗩ᴹњԕн਼仌㢢ḷࠪⲴമḷˈ⭘
н਼仌㢢㺘⽪ᯝ⛩Ⲵ⣦ᘱDŽ㔯㢢㺘⽪ᴹ᭸ᯝ⛩ˈ哴㢢㺘⽪㻛⾱→Ⲵᯝ⛩ˈ⚠㢢㺘⽪ᰐ᭸Ⲵᯝ
⛩DŽৼࠫ࠭ᮠਟ᭩ਈᯝ⛩Ⲵ⣦ᘱDŽ
˄2˅䇮㖞՚ᤷԔᯝ⛩
᤹ Ctrl+O䭞ᢃᔰ Opcodes Control Dialog デਓ˄㿱മ 8.15 DŽ˅䈕ሩ䈍Ṷᱮ⽪ᡰᴹࣙ䇠
ભԔࡇ㺘ˈਟԕሩᵪಘ⸱оࣙ䇠ભԔ䇮㖞ᯝ⛩DŽ
� Address˖ᤷࠪҶ᧗ࡦᤷԔⲴൠ൰˗
� Opcode˖ᵪಘ⸱˗
� Mnemoni˖ࣙ䇠ભԔˈ䶎ᑨ䟽㾱˗
� Size˖ᤷࠪҶભԔԓ⸱䮯ᓖDŽ
൘ൠ൰ᯱ䗩ᴹањԕн਼仌㢢ḷࠪⲴശᖒമḷˈ⭘Ҿᱮ⽪ᯝ⛩Ⲵн਼⣦ᘱDŽ㔯㢢Ⲵᱟ㻛
◰⍫Ⲵˈ哴㢢Ⲵᱟ㻛⾱→Ⲵˈ⚠㢢Ⲵᱟཡ᭸ⲴDŽ᭩ਈ⣦ᘱਚ䴰ৼࠫ࠭ᮠDŽ
第 8章 Visual Basic 程序 7
മ 8.14 ൘㲊ᤏᵪ API࠭ᮠબਛк䇮ᯝ⛩ മ 8.15 䇮㖞 Opcodeᯝ⛩
4κ㇗⨼ネ։Ƚ㊱ૂ⁗ඍ
˄1˅㊫㇑⨶
অࠫ Class Manager ᢃᔰ Class Managerデਓ˄㿱മ 8.16 DŽ˅䈕ሩ䈍Ṷݱ䇨൘ࡇ㺘ѝሩ
䘹ѝⲴ㊫䇯䰞DŽ֯⭘ᖸㆰঅˈ䘹ᤙањ㊫ˈྲ᷌䟼䶒ᴹሩ䊑ˈࡉᓄⲴ᤹䫞ሶՊ㻛◰⍫ˈঅ
᤹ࠫ䫞ቡਟԕ䇯䰞ˈ㘼ሩ䊑ᙗሩ䈍ṶቡՊᱮ⽪DŽ
മ 8.16 ㊫㇑⨶ മ 8.17 デփ㇑⨶ മ 8.18 ሩ䊑ᙗ
˄2˅デփ㇑⨶
᤹ Ctrl+F 䭞ᢃᔰ Form Managerデਓ˄㿱മ 8.17 DŽ˅оሩ䊑ᙗ㊫լDŽ
˄3˅ሩ䊑ᙗ˄Object Propierties˅
ᱮ⽪デփᡆ㊫ⲴޣؑDŽ൘䈳䈅〻ᒿᰦˈ䈕デਓ䶎ᑨ䟽㾱ˈਟṩᦞ䴰㾱䇮㖞ᯝ⛩DŽമ
8.18ᱮ⽪Ⲵᱟ ⺞ᇊ ᤹䫞Ⲵؑˈঅࠫ BPX ᤹䫞ਟԕሩ↔᤹䫞䇮㖞ᯝ⛩DŽ
� UUID˖128 ս㊫ර䇶࡛᧗ࡦ˗
� Addr˖ሩ䊑䎧ൠ൰˗
� Table˖ሩ䊑ࡇ㺘䎧ᮠᦞൠ൰˗
� Ofs˖ࡇ㺘䱴࣐ᮠᦞٿ〫䟿˗
� Proc˖ሩ䊑᧗ࡦ䘋〻ൠ൰㤳ത˗
加密与解密(第三版) www.pediy.com 8
� Index˖デփሩ䊑㍒ᕅ˗
� BPX˖ݱ䇨ⴤ᧕൘ሩ䊑к䇮ᯝ⛩DŽ
5κᵰಞ⸷фࣟ䇦ળԚ
ᵪಘ⸱оࣙ䇠ભԔ㺘˄Opcode and Mnemonics Table˅ᖸ䟽㾱ˈާփ৲㘳ަ㠚ᑖⲴᑞࣙ᮷
ԦDŽᦼᨑ VB P-codeⲴޣ䭞ቡ൘䘉Ӌࣙ䇠ભԔкDŽ䘉䟼ਚࡇࠪࠐњᑨ⭘Ⲵࣙ䇠ભԔDŽ
� BranchF˖ᵪಘ⸱ᱟ 1Chˈ3њᆇ㢲DŽᶑԦ䐣䖜ᤷԔˈྲึḸⲴ٬ᱟ 0ቡ䐣䖜DŽঅࠫ
Analize BranchX ᤹䫞ਟԕҶ䀓ᖃࡽ䘋〻ѝⲴᡰᴹᶑԦ䐣䖜ᤷԔⲴս㖞DŽ
� BranchT˖ᵪಘ⸱ᱟ 1Dhˈ3њᆇ㢲DŽᶑԦ䐣䖜ᤷԔˈྲึḸⲴ٬ᱟ FFFFFFFh˄-1˅
ቡ䐣䖜DŽ
� Branch˖ᵪಘ⸱ᱟ 1Ehˈ3њᆇ㢲DŽᰐᶑԦ䖜〫DŽ
� EqVarBool˖ᵪಘ⸱ᱟ 33hˈ1њᆇ㢲DŽ∄䖳ᤷԔˈ∄䖳єњਈ䟿ˈṩᦞ㔃᷌ሶ-1ᡆ
0䘋ึḸDŽਟԕঅࠫ Opcodes ൘↔՚ᤷԔ༴䇮㖞ᯝ⛩DŽ
� LitI2_Byte˖ᵪಘ⸱ᱟ F4hˈ2њᆇ㢲ˈሶᮠᦞޕึḸDŽ
� ConcatStr ᵪ˖ಘ⸱ᱟ 2Ah 1ˈᆇ㢲DŽᆇㅖѢ㚄᧕ᤷԔ˄ ᖃҾ C䈝䀰ѝⲴ strcat࠭ᮠ DŽ˅
↔ᤷԔঅ↕䐏䑚˄Step Trace˅ᰦˈՊ൘ᰕᘇデਓѝ⮉лᓄᆇㅖѢ㚄᧕㔃᷌DŽᡰԕˈ
ਟԕঅࠫ Opcodes ൘↔՚ᤷԔ༴䇮㖞ᯝ⛩ˈԕׯҶ䀓ḀᆇㅖѢ٬DŽ
� FLdZeroAd / CVarStr˖ ਆᆇㅖѢᤷԔˈ⢩⛩਼ ConcatStrDŽ
6κ⨼䀙 P-code䈣ਛ
ᇎֻ Vbpcode.exe〻ᒿ䟷⭘ P-code㕆䈁ˈⓀ⸱ྲл˖
Private Sub Check_Click()
Dim sn As Long, x As Long
Dim t As Integer, i As Integer
sn = Val(Text2.Text)
t = Len(Text1.Text)
x = 0
If t < 4 Then
MsgBox "ဃ㾱 4њᆇㅖԕкʽ", 48, "ᨀ⽪"
Else
For i = 1 To t
x = Asc(Mid(Text1.Text, i, 1)) + x
Next i
If sn − x = 0 Then
MsgBox "ᡀ࣏DŽ", 64, "ௌ"
Else
MsgBox "нᡀ࣏DŽ", 16, "ሩн䎧"
End If
End If
第 8章 Visual Basic 程序 9
End Sub
㻵䖭 vbpcode.exeਾˈঅࠫ ⺞ᇊ ᤹䫞ቡ㜭ѝᯝ൘WKTVBDE䟼DŽҏਟݸ䇮㖞ᯝ⛩ˈ
᤹ Ctrl+F 䭞ᢃᔰ Form Managerデਓ˄㿱മ 8.17 DŽ˅൘л㨌অ䟼䘹ᤙデփ Form1 ˈ অ
ࠫ command ᤹䫞ˈᢃᔰሩ䊑ᙗሩ䈍Ṷ˄㿱മ 8.18 DŽ˅䘹ᤙ Check ˈ অࠫ BPX 䇮㖞
ᯝ⛩ˈҏቡᱟሩ ⺞ᇊ ᤹䫞һԦ䇮㖞Ҷᯝ⛩DŽ
䗃ޕဃ pediy઼ᒿࡇਧ 1234DŽঅࠫ ⺞ᇊ ᤹䫞ሶѝᯝ൘WKTVBDE䟼ˈԓ⸱ྲл˖
00402240: 04 FLdRfVar 0012F5B0h ; аᔰѝᯝ൘䘉ˈ❦ਾ᤹ F10䭞অ↕ᢗ㹼
00402243: 21 FLdPrThis 0013AF28h
00402244: 0F VCallAd Form1.Text2
00402276: 6C ILdRf 00000000h
00402279: 4A FnLenStr ; ᗇࡠᆇㅖѢ䮯ᓖ
0040227A: E4 CI2I4
0040228C: 6B FLdI2 ; ሶᆇㅖѢ䮯ᓖޕḸ
0040228F: F4 LitI2_Byte: -> 4h 4 ; ሶᮠᆇ 4h䘋ึḸ˄ᵪಘ⸱ᱟ: F4 04˅
00402291: D0 LtI2 4h,5h ? ; ᆇㅖѢ䮯ᓖ>4
00402292: 1C BranchF 004022C9 ? ; 䐣䖜ᤷԔ˄ึḸᮠᦞᱟ 0ቡ䐣䖜˅ˈ 䐣䖜ᰦ᤹ F8䭞
004022C9: F4 LitI2_Byte: -> 1h 1 ; ᮠᦞ 1ޕḸ
004022CB: 04 FLdRfVar 0012F5B8h ; ተ䜘ਈ䟿 0012F5B8hޕḸˈi
004022CE: 6B FLdI2 FFFF0005h
004022D1: FE Lead3/ForI2: ; 0012F5B8hᤷੁⲴᮠᦞ䍻٬ 1ˈণ i=1
004022D7: 04 FLdRfVar 0012F5B0h
004022DA: 21 FLdPrThis 0013AF28h
004022DB: 0F VCallAd Form1.Text1
004022DE: 19 FStAdFunc
004022E1: 08 FLdPr
004022E4: 0D VCallHresult get__ipropTEXTEDIT
004022E9: 28 LitVarI2 1h , 1
004022EE: 6B FLdI2 ; ሶ iਆࠪᒦޕึḸ
004022F1: E7 CI4UI1
004022F2: 3E FLdZeroAd ; ᆇㅖ pediyⲴᤷ䪸ޕḸ
004022F5: 46 CVarStr
004022F8: 04 FLdRfVar 0012F550h
004022FB: 0A ImpAdCallFPR4 rtcMidCharVar ; Mid(Text1.Text, i, 1)
00402300: 04 FLdRfVar 0012F550h
00402303: FD Lead2/CStrVarVal ; ሶਆࠪⲴᆇㅖ Name(i)ޕḸ
加密与解密(第三版) www.pediy.com 10
00402307: 0B ImpAdCallI2 rtcAnsiValueBstr
0040230C: E7 CI4UI1
0040230D: 6C ILdRf ; xޕḸ
00402310: AAAddI4 ; x = Name(i) + x
00402311: 71 FStR4
00402314: 2F FFree1Str
00402317: 1A FFree1Ad
0040231A: 36 FFreeVar -> 3
00402323: 04 FLdRfVar 0012F5B8h ; 0012F5B8hѪ䇑ᮠಘˈᢗ㹼ᆼлаਕਾ࣐ 1
00402326: 64 NextI2: jump to 004022D7 ; ᗚ⧟ˈ᤹ F8䭞䘋ޕ
0040232B: 6C ILdRf 000004D2h ; 4D2hᱟ䗃ޕٷᒿࡇਧ 1212 Ⲵ 16䘋ࡦ
0040232E: 6C ILdRf 0000021Bh ; 21Bhᱟ㓿䇑㇇Ⲵⵏᒿࡇਧˈ䖜ᡀ 10䘋ࡦᱟ 539
00402331: AE SubI4 ; sn - x
00402332: F5 LitI4: -> 0h 0 ; ሶᮠ٬ 0ޕḸ
00402337: C7 EqI4 ; ሶ 0о(sn – x)∄䖳ˈྲнㅹሶ 0ޕḸ
; ྲㅹሶ-1ޕḸ
00402338: 1C BranchF 0040236F ? ; ྲㅹቡ⌘ᡀ࣏
0040233B: 27 LitVar_Missing 0012F530h
0040233E: 27 LitVar_Missing 0012F550h
00402341: 3A LitVarStr 'ௌ'
00402346: 4E FStVarCopyObj 0012F570h
к䘠ԓ⸱ᱟ䇢䘠〻ᒿ㇇⌅䗷〻DŽྲ ᷌ᜣⴤ᧕؞᭩ P-code〻ᒿ 䈕ˈᘾѸ࣎˛ٷ䇮㾱؞᭩
00402338аਕˈ䇙ަнㅹቡ⌘ᡀ࣏DŽ
˄1˅ᯩ⌅а
؞᭩ BranchFⲴкаᶑ䈝ਕˈ⭘ LitI2_Byte՚⸱ˈሶ-1ޕึḸˈᵪಘ⸱ᱟ˖F4 FFDŽ
ն↔ֻѝˈEqI4ᤷԔਚᴹањᆇ㢲ˈ㘼 LitI2_Byte -1ᴹєњᆇ㢲ˈഐ↔н㜭䟷⭘DŽ
˄2˅ᯩ⌅Ҽ
ሶ BranchF䈝ਕ᭩ᡀ BranchT˄ᵪಘ⸱ᱟ 1Dh˅ˈ BranchT䐣䖜ᶑԦ઼ BranchF৽ˈྲ
᷌ึḸᱟ 0ˈቡн䐣䖜DŽঅࠫ EDIT ᤹䫞ᢃᔰᆈ㕆䗁ಘˈ൘ൠ൰ 402338 ༴ৼࠫˈᢃᔰ
ᮠᦞ؞᭩Ṷˈሶ 1C᭩ᡀ 1Dˈঅࠫ Patch Now ᤹䫞؞᭩〻ᒿDŽࡊਚᱟ؞᭩Ҷᆈᮠ
ᦞˈ㤕ᜣ؞᭩᮷Ԧˈਟԕ⭘ Hiewᶕ؞᭩DŽݹⴈᨀҶ䈕ᯩ⌅Ⲵࣘ⭫ᮉᆖDŽ
P-code〻ᒿᒦн䳮 ˈޣ䭞ᱟ㾱⨶䀓ࣙ䇠ભԔⲴਜ਼ѹDŽ䈫㘵㤕ᝏޤ䏓 ਟˈԕ߉Ӌ╄⽪〻ᒿˈ
❦ਾ৽㕆䈁࠶᷀DŽ