OllyDbg Q&A
- ȉ̉́AfobKpPCQ[͂ȂǃvO͂́AS҂̕ΏۂƂĎM܂B
- ȉ̉́AɋLڂ̂Ȃ32rbgAvP[VΏۂƂĂ܂B
- ȉ̉Ver1.10gpx[XɂĂ܂B
- ȉł̓j[̍ږɂāAΉ{ꉻpb`Kp̍ږFŕLĂ܂B{ꉻpb`͓TCgCy[WŔzzĂ܂B
- ȉɋL[́AWj[ENbNɂ|bvAbvj[瓯l̑ŝ܂B
- ȉ́uCEBhEvƂ́AwOllyDbgxŃAvP[VNƍŏɕ\uCPUEBhEv̂ƂłBɎŵȂꍇAȉ́uEBhEv͂́uCPUEBhEv̕ꂽEBhE(yC)w܂B
- fobOΏێst@C܂̓vZX̂ƂAʂɁufobM[vEufobMv(Debuggee)ƌĂт܂B
- ȉ͓̉]̃o[XGWjALuƁA҂ALucaōsĂ܂B
| \m | ֘A | Q[͊֘A | ̑ |
ꗗ
\m
- wOllyDbgxȂǂWindows Vistaȍ~ł̓ɂċĂB
- tAZuR[hXgɂċĉB
- u[N|Cg̎ނƂ̈ႢɂċĉB
- fobO̕Kv܂
- fobOɃVXeDLLŃANZXᔽ̂OS̖łH
- fobM[f^b`邱Ƃ͂ł܂H
- fobM[̃Gg[|CgR[hZNVȂECXɂ͊Ă܂H
- ECXƂẴfobOoɂċĉ
- fobM[̃ECXoOɂ郌WXgjɔāASɓƗʼn͂sB
- ͎ɃfobM[st@CEWXǧʂȒPɊmFB
- fobKo@ĂB
- INT߂pfobKo肭܂(FWindowsXP)B
- wOllyDbgx̃vZXoĉ͂WQ^CṽECX͂
- OSŃfobK삵Ƃo@Ă
- A^b`ău[N|Cgݒ肷ƁAu[N|Cg@\ȂɋI\tgEFÂłB
- fobKŋN^A^b`ƁAfobM[IĂȂ̂ɃfobKfobM[IƔF܂B
- wOllyDbgx̂悤ȃfobK\uŌ̃G[v̓fobM[̂ǂɊi[Ă̂łH
- ͑ΏۃvZXPEB(Process Environment Block)̏擾(FWindowsXP)
- Windows XP Service Pack 2Ŏf[^sh~@\Œӂׂ_邻łc
- wOllyDbgx̃ZLeBz[ɂċĂ
- wOllyDbgx̉łƂ͂ǂ̂悤Ȃ̂łH
- MFC̃^CDLLGNX|[g̏ڍׂm肽
- CÕ\tgEFA{ꉻĂ݂
- APItbNɗpvZXpDLLo
- tAZuɍsAGg[|CgNOP߂Ƃ\tgEFÂłB
- fobKȂǂ̃vO͊֘Ac[삵Ă݂
- vZX̃W[GAst@CƂă_v(t@Cɕۑ)ĂAɓ삵Ȃ͉̂̂łH
- ͒S҂fobKʼn͑ΏۂNOɍsׂƂ́H
֘A
- wOllyDbgx̑@Ql͂܂H
- wOllyDbgx͑ΏۂȒPɋN@m肽B
- œɊoĂƖ𗧂|Cg͂܂H
- wOllyDbgxvOC̓́H
- APIĂяoւ̃u[N|Cgݒ̎dm肽B
- tu[N|Cgݒ肵Ă݂B
- EBhEbZ[WɃu[N|Cgݒ肵Ă݂B
- APIĂяoӏł͂ȂCӂ̕R[hɈꊇău[N|Cgݒ肵B
- A^CAZuŒӂׂƂ́H
- e̓eϓӏׂɂ́H
- vOQƂĂ镶̈ꗗ\@\gB
- 蕶̎QƃR[hꗗ\@\gB
- ̃R[hɃ^b`Ŗ߂@m肽B
- R[߂Tu[`yсAWv߂WvɃ^b`ňړ@͂܂H
- F7L[ŃTu[`ɃXebvCɁAȒPɃTu[`@͂܂H
- VXeDLLAfobM[st@CȊÕR[h\ꍇ̑Ώ@́H
- tAZuR[hEBhE(EBhE)ŃR[hύX̎st@C̕ۑ肭܂B
- uJust-in-time debuggingv(WXgECE^C fobO)Ƃ͉łH
- wOllyDbgxł̃\[XxfobO肭܂
tAZuR[hXgɂċĉB
|
fobKuOllyDbgvŕ\ꂽAtAZuuPeRdrvŏo͂AvÕR[htAZuƌĂ鑀ɂlԂvȌ̗Fł悤ɂ̂AutAZuR[hXgvƌĂт܂B OllyDbg\Ă̂́AΏۃAvP[V̋NɔvZXɓǂݍ܂ꂽAΏۃAvP[VEXEt@CɊ܂܂vÕR[hAvZXǂݍŋtAZûłBAuPeRdrv͎st@CsȂ܂܃t@CvÕR[hǂݍŋtAZuĂ܂B fobKpPCQ[̉͂ɂẮAtAZuR[hXg̓lj͕K{ƂȂ܂B̂߁AtAZuR[hXg̍\vfłuWX^vAuj[jbNvAu(AZu)߁vAuAPIv𗝉Kv܂B fobKpPCQ[͂n߂OɁAwLTGfB^vZXGfB^Ƃ{c[̑𗝉ĂƁAfobKpPCQ[͂X[Yɗł悤ɂȂ܂B̂߁AꂩPCQ[͂n߂悤Ƃɂ́AȂfobK̂ł͂ȂA炩߃vZXGfB^̑ɊĂƂ߂܂B ȉł́A32rbgAvP[V̋tAZuR[hXg̓ljn߂邽߂̒[ƂׂAKvŒ̊{Ȍɉ܂B܂ŃvO͂Ƃ_ł̉łACPUA[LeN`Sʂ̉vO~OړIƂł͂܂B ȉPCQ[̊JňʓIɎgpĂC/C++ŊJꂽQ[̋tAZułB㑝Ɨ\zC#ŊJꂽ.NETΉAvP[Vł͈ȉ̂悤ȋtAZu͍sAp̋tRpCgpĉ͂邱ƂɂȂ܂B܂ACŊJꂽQ[łAvÕR[hɈkÍ{ƂŋtAZuɂĂP[X܂B {̏ڍׂɂẮATCgȉ̃NɂĎQlƂȂ鏑ЂЉĂ܂̂ŁAEQƂ邱Ƃ߂܂BɁAAZu̖߂̈ꗗƂ̏ڍׂȉ܂ށuIA-32 CeEA[LeN`E\tgEFAEfxbp[YE}jAvсAAPÏꗗƂ̏ڍׂȉ܂ށu}CN\tgEvbgtH[SDKv́AtAZuR[hXg̓lj܂ރvO͂ɑ傢ɖ𗧂܂B܂Albgł̌ϋɓIɊp邱Ƃ߂܂B tAZuR[hXgljvO͂ɊւeQ&A tAZuR[hXgljvO͂ɖ𗧂e펑 vO͂ɖ𗧂Ql ėpvZXGfB^fobKw݂݃nP[x̃wvubpv tAZuR[hXg̊{Iȓljł悤ɂȂA̓fobKuu[N|Cg@\vAuXebvs@\vAuWX^EvZXҏW@\vAuQAPIƓĂяoӏ̈ꗗ\@\vсuQƕꗗ\@\vƁAfobŐtAZuR[hXgƂ̊ւ𗝉邱Ƃ߂܂B͊e`[gAۂ̉͂ʂĂ̎s낪Ał̋ߓɂȂƍl܂B tAZuR[hXgo͗ OllyDbgCPUEBhEɕ\ 0040158F > 6A 10 PUSH 10 @00401591 . E8 86010000 CALL <JMP.&USER32.GetAsyncKeyState> @00401596 . 80FC 80 CMP AH,80 @00401599 75 55 JNZ SHORT UsaTest2.004015F0 @0040159B B8 01000000 MOV EAX,1 @004015A0 8305 34124000 64 ADD DWORD PTR DS:[401234],64 @004015A7 813D 34124000 E8030000 CMP DWORD PTR DS:[401234],3E8 @004015B1 7E 1D JLE SHORT UsaTest2.004015D0 @004015B3 C705 34124000 E8030000 MOV DWORD PTR DS:[401234],3E8 PeRdrŃt@Cɏo @0040158F 6A10 push 10h * Reference to USER32.GetAsyncKeyState | 00401591 E886010000 call 0040171Ch 00401596 80FC80 cmp ah,80h 00401599 7407 jz 004015A2h 0040159B B800000000 mov eax,00000000h 004015A0 8B00 mov eax,[eax] tAZuR[h̍\vf AhX L̗ł́u40158FvƂ16i̒lB́AsR[h̃vZXł̔ԒnwA32rbgAvP[Vł4oCg̒lƂȂBEXEt@C̎st@CvOƂĎsۂɂ́A܂st@CVXeɂpӂꂽYvZX̂߂̃vZXɃ[hA̎st@CɊ܂܂R[hvZXŎsB{IɁAEXEt@C[hvZX̃AhX0x400000N_ƂȂ(FWindows Vistaȍ~ł́AEXEW[_ȃAhXɃ[h@\ASLRĂ܂BASLR̉ƁAvO͂ɂASLRւ̑ΏɂẮA̎ƉQƂĂ)B ܂Ast@CɕtAKernel32.DLL̃VXet@Cł͂ȂDLLt@C͊{IɃAhX0x10000000Ƀ[h邪ADLLgpꍇ͕ʂ̃AhXɂ[hB̔zuP[VƌĂԁBst@Ĉ܂ȍ\ƂẮAPEwb_ƌĂst@C̊{ݒi[f[^ubN擪ɂǍɃZNVƌĂAR[hf[^̊i[eɉċꂽf[^ubNłB{IɁAsR[h܂܂R[hZNVŏ̃ZNVƂȂB oCif[^ L̗ł́u6A 10vƂ16iŕ\f[^B́AvZXɂsR[h̎̂ŁACPU01Ŏw肳ꂽ2ĩf[^(oCif[^)ƂēǂݍށBCPU͂̃oCif[^R[hƂĒډ߂đΉ鏈s邽߁ÃR[hΉoCif[^̓}V(@B)ƌĂBvȌƂ́Ã}VŎw肳ꂽCPU11ԂɎsĂƂӖBȂAoCif[^16iŕ\Ă̂͐lԂɂƂĂ̎Fǐ̂߁B j[jbN L̗ł́uPUSH 10vƂAj[jbNƌĂpB̓}V̓elԂł悤₷|̂ŃAZuƌĂB{AZu̓}V11őΉ鏈j[jbŇ`ŋLqĎst@C쐬(AZu)Jł邽߁A}VꂩAZuɖ|鏈utAZuvƂBȂAAZuŋLqꂽR[hAZu\tgEFAAZuƌĂԁB IyR[h j[jbN̍ŏɂuPUSHvAuMOVvAuCMPvсuJ**vƂpCPUs̎ނŵŁu(AZu)߁vƌĂԁBj[jbN̍\vfƂĂ̓IyR[hƌĂB Iyh j[jbN̒ŁAZA߂̏ΏۂƂȂ鐔lWX^(q)IyhƌĂԁBƂāAj[jbNuMOV EAX,1vɂĂEAXWX^1IyhAl12IyhƌĂBIyh劇[ ]Ŏw肳Ăꍇ́A[ ]̒̃AhXɊi[ꂽlӖBuDWORD PTR [402010]vPɁu[402010]vȂAAhX0x402010Ɋi[ꂽDWORD̒lƂȂBΏۂƂȂl̃TCYDWORDȊOȂAuBYTE PTRvuWORD PTRvŎw肷B WX^ IyhƂĎgpACPU̓ɂꎞLpBʓIȖ߂ɎgpėpWX^A_pZɎĝсA}Vꃌxł̃AvP[ṼfobOp̂̓B32rbgCPUɂėpWX^́AEAXAEBXAECXAEDXAESIAEDIAɂ͓ȗprɗpESPAEBPAEIPAEFLAGSB32rbgCPUɂėpWX^̃TCY4oCg(32rbg)ƂȂ邪AėpWX^E*X́A4oCĝ2oCg1oCgΏۂƂĎgp邱Ƃł(EAXWX^̉2oCg=AXAAX̏1oCg=AHA1oCg=AL)BWX^擪́uEv16rbgCPŨWX^Ƃ̑Δ32rbg֊g(Extend)ꂽƂӖB E*XWX^͓ɉZ|C^(AhXw肷邽߂ɃWX^AhXɊi[ꂽlg)уJE^prƂBE*XWX^ɂ͂ꂼ{̗pr(EAXFe퉉ZAEBXF|C^AECXFJE^AEDXFf[^ꎞLEAXƂ̘Agɂ揜Z)߂Ă邪̗prɐł͂ȂBESIEDIWX^͔ėpIȎgp\A{̓f[^]ߓŃf[^̓]AhX(SI:SourceIndex)]AhX(DI:DestinationIndex)i[́BESP(SP:StackPointer)݂͌̃X^bN(q)̃AhXi[BEBP(BP:BasePointer)͊{IɃX^bÑf[^ɑ|C^ƂĎgpBEIP(IP:InstructionPointer)́AɎs閽߂̃AhXi[A߂s邽тɓeXVB tO Z߂r߂̎sAZʂ[ۂArʂł̑傫ۂȂǂӖtOrbgPʂ10EFLAGSWX^Ɋi[BEFLAGSWX^ɂ̓[ۂȂǓɑΉrbg炩ߎw肵ĂAɍvtOZbg(Yrbg1ݒ)AɍvȂȂtONA(Yrbg0ݒ)B̃tȌɃWv߂găvȌ邱Ƃ\ɂȂBEFLAGSWX^̂̂悤ȃtOXe[^XEtOƌĂԁB l tAZuR[hXgł́AAhXIyhƂĎgp鐔l16iŕ\BȂAʓI16ił邱Ƃꍇ͐ľɁuhvt邩Al̑OɁu0xvt邱ƂōsB X^bN vOꎞIɃf[^i[郁̈BX^bNŐVɃf[^i[AhX͏ESPWX^Ɋi[ĂAvOŃAhXڎw肷KvȂBX^bNɃf[^i[ۂPUSH߂pAX^bNł́AAhX0x10FFF8Ƀf[^i[玟̓AhX0x10FFF4Ƃ悤ɁAAhX̍ႢāA܂Őςݖςނ悤Ƀf[^i[邽߁AX^bNɐςނƂBX^bNf[^oۂɂPOP߂pAESPWX^̃X^bN|C^pX^bÑf[^i[ɂAɐς܂ꂽf[^Ɏo邱ƂɂȂBPUSH/POPߎsɂ͎IESPWX^̊i[lCB ܂AėpWX^̓eX^bNɊi[/oPUSHAD/POPAD߂AEFLAGSWX^̓eX^bNɊi[/oPUSHFD/POPFD߂B API L̗ł́uUSER32.GetAsyncKeyStatevBAPÍAAvP[VOS̋@\eՂɎgp邱Ƃ\ɂAAPI(Application Programming Interface)1vfB̗ł́AWindowsOS̃VXeDLLłUser32.dllÃL[Ă邩ۂf@\GetAsyncKeyStateĂяoĂBAPǏĂяoɂȀs邽߂ɕKvȃp[^(FЂ)w肷ꍇ́APUSH߂Ől̂̂邢̓f[^i[ꂽAhXX^bNɐςނƂŎw肷BL̗ł10hShiftL[ӖB ܂AAPȊ́ȀsƁȀʂAۂӖl(߂l)EAXWX^Ɋi[BȂANTnOSIɗp{IɔJAPIulCeBuAPIvƌĂԁBlCeBuAPI̓[U[([U[[h)ƃVXe(J[l[h)̊Ԃŏ̋nsڂB API͂ꂼꂪ̋@\߁AႦCD/DVD`FbN̉͂ɂĂ͋tAZuR[hXgœ`FbNɕppAPǏĂяoTAPCQ[͂ɂĉ͂̎肪ƂȂ邱ƂȂȂBǂ̂悤ȃP[Xɂǂ̂悤APIg邩́ATCg̃`[gAQ&AȂǂʼnĂ̂ŁAQƂ邱Ƃ߂B Ql vO͂ɂĕpo{IȖ
|
u[N|Cg̎ނƂ̈ႢɂċĉB
fobKu[N|Cgł̃u[No邽߂ɂ́AfobM[ uOv ƌĂʏ̃vȌł͋NȂ()ȏNKv܂BfobM[ɗO_ŃfobM[̐̓fobKɈڂ邽߁AfobK͂̎_ŃfobM[̃XbhɂėpWX^Xe[^X䃌WX^̒l擾EύX\łB₷Au[N|Cg̈Ⴂ̓fobKo uOv ̎ނ̈ႢłB܂ÄႢɉăfobM[ւ̈قȂ̓Av[`sƂ\ɂȂ܂B1.R[hs u[N|Cg
́AɓWJEsR[h̔Cӂ̉ӏ̃j[jbN擪AhX(1oCg)AuINT3v(IyR[hCC)߂ɏ̂łB̊荞ݖ߂͎sƃfobOOnhĂяoȂ̂ŁǍĂяofobKŗOƂČo܂BfobK̓u[NɁuINT3vŏӏꎞIɃIWi̖߂ɏāAIWi̖߂s܂B
2.ANZX u[N|Cg
́AfobM[̔Cӂ̃ubÑANZXǂ()sɕύX邱ƂŁAfobM[̃ubÑAhXɓǂ()sۂɃANZXᔽÃANZXᔽfobKŗOƂČo܂B̃u[N|Cg̓ubÑANZX{肦ȂɕύX邽߁AfobM[NbV邱Ƃ܂B̃u[N|CgݒɂANZXᔽƁAfobM[̃oOɂANZXᔽ͎ĔȂ̂łB҂̏ꍇ́A{IɃfobKEIPYj[jbN邢EIP̒l̃j[jbN擪̃AhXɏėOȂƁAO甲oƂł܂BAANZXᔽɂẮA̗Oďs\ȃP[X܂B
3.n[hEFA u[N|Cg
uIntel 80386vȍ~CPUɎĂfobOWX^gpāAR[hsyуANZX(ǂݏ)Ńu[N̂łBL1y2ƈقȂAfobM[̃R[hubÑANZX͕ύX܂Bn[hEFAu[N|Cg̓fobM[̃vZXXbhɐݒs܂AWindows95ł͎IɑSXbhɈꊇݒ肳܂(wOllyDbgx̓ftHgőSXbhɈꊇݒ)BfobOWX^8(DR0`DR7)̂An[hEFAu[N|Cg̐ݒɂ͍ō5(DR0/1/2/3+DR7)gpA4ӏ܂Ńu[N|Cgݒ\łBu[N|Cg̐ݒPʂ1,2,4oCgłA͎҂Ӑ}Ȃu[N̉\lƁAʏ1oCgł̐ݒ肪KƂ܂B
L3̃u[N|CgɂẮAfobM[Őݒ肳ꂽƂo\łB܂Au[N|Cgݒ肳ĂȂƂAfobM[͎fobOĂ邱ƂeՂɌoł܂B܂A\tgEFA҂̓o[XGWjAOƂāAfobKNEA^b`邢̓u[N|Cgݒ肳ꂽ_ŎsA炩̃o[XGWjȀ\tgEFAɎdނƂ\łB
fobO̕Kv܂
fobOȂԂłAHBP/INT3u[N|Cgݒ肵ău[NƂAfobKƂĂ͈̏ꉞ\łB̂߁Aۂ̉̓c[̎gpŖڗ_ƂẮAvZX̗Ɋւ_Ƃ܂BfobOȂAꕔ̃VXevZXȂǂ͔Fł܂BA̓c[Ƃēɏdvȓ_́AfobO(SeDebugPrivilege)ADACL(Discretionary Access Control List)𑀍삵ăANZXǂݏsɐݒ肵vZXłĂAȂ̃vZX̓ǂݏsƂł邱ƂłBȂ݂ɁA͑ΏۃAvP[Vł́Ag̃vZXDACLAGetKernelObjectSecurityGetSecurityDescriptorDaclgĎ擾AACE(Access Control Entry)āAPROCESS_VM_READ̃ANZX菜Ƃ\łBύXDACL̐ݒɂ́ASetSecurityDescriptorDaclSetKernelObjectSecuritygp܂BlɁANɎgċNA[_[oR邱ƂŁÃvZX(CreateProcessĂяo)ɐ{DACLKpƂ͑\łB̏ꍇ̐VDACLݒ肷鏈ɂ́ABuildExplicitAccessWithNameSetSecurityDescriptorDaclȂǂgp܂BāAfobOAL̎@PROCESS_TERMINATẼANZX菜vZXłAI邱Ƃ\łB
܂A͑Ώۂ̃vZX́ADACLPROCESS_VM_READȂǂ̃ANZXԂŋNAɌofobKvZXGfB^̃fobOIɒDÃvZX̃vZX̉̓c[ANZXsɂAvZXIsɂ邱Ƃ\ɂȂ܂BقƂǂ̉̓c[́ÃfobOIɒDƂԂ͑z肵Ă܂B
ȂAw݂݃nP[xł́AvZX̃fobOƂeIɗLE邱Ƃł܂B̋@\́Aj[[t@C][vZX̊e\][]őΏۓENbNs܂B܂Aw݂݃nP[xNɕ\vZXXgŁAENbNɂ|bvAbvj[[vZX̊e\]炱̋@\ĂяoƂł܂B
֘AāA̓c[̃fobÓA̓c[ǗҌŋNȂƁAɂ邱ƂɒӂĂB̓c[ł̃vZX̗I[vɕsA܂͉̓c[ǗҌŋNƂ߂܂B
fobOɃVXeDLLŃANZXᔽ̂OS̖łH
OS̕sł\܂Ȁꍇ̓fobM[łAPIĂяöɌ܂B̎we(ɍ\̂̃oϐ)ɒӂĉBAvO}\tgEFAŖ肪ƔfŁAsKɂȂP[XɑΏĂȂƂ邽߁AfobÔݕ\ʉ悤ȃANZXᔽ\tgEFÃoOƂ͒fł܂BfobM[f^b`邱Ƃ͂ł܂H
WindowsOSł́A{IɃfobKfobM[ɃA^b`ƁAf^b`ăfobM[̃fobOOSɈpƂ͂ł܂B̂߁AfobOɃfobKIƁAfobM[͗Oւ̑Ώs\ɂȂ邽ߕKI܂B𗘗pAWindows2000/XPł̃T[rXvOAȌʏ͋Is̃vZXłAI\ȃP[X܂(A^b`ăfobKƏI)BlɁAIvZXw肵DebugActiveProcessŃA^b`ɁADebugBreakProcessĂяoƂ@܂(fobKł͗OȂ)BʓIȃvZX̓u[NOnhȂ߁ÅĂяoł~邱Ƃ\łBAT[rXvŐI̓VXeɈe^\邽߁A\ȒӂKvłB
ȂAWindows XPŎꂽDebugSetProcessKillOnExitpAfobKIɃfobM[IȂƂ\łBAAPI̓fobK̃XbhƃfobM[̃vZX藣̂łAfobK̃XbĥACreateProcess邢DebugActiveProcessŃfobM[ƐڑXbĥ݂f^b`ΏۂłB܂AfobK}`Xbhœ삵AfobK̋@\Ƃ͊WȂXbhfobM[̃vZX𑀍삵ĂȂADebugSetProcessKillOnExitĂяołSȃf^b`͂ł܂BANtRemoveProcessDebugȂǂ̃lCeBuAPIgpAقڊmȃf^b`\ɂȂ܂B
wOllyDbgxɂ́ADebugSetProcessKillOnExitɂf^b`@\vOĆAwOllyDbg De-Attach Helperx܂B
֘AāAfobKɃfobO~AWindows XPŎꂽDebugActiveProcessStopƂAPI܂BȂAfobM[ŃlCeBuAPIZwSetInformationThreadpăfobKf^b`s@́Af^b`̗O̖ʂňSɖ肪܂B
fobM[̃Gg[|CgR[hZNVȂECXɂ͊Ă܂H
ECXɂĂ̓R[hZNV̋̈ɃR[hߍނƂȀꍇGg[|Cg̓R[hZNVɂȂ܂B\tgEFA̓̐MxɊւ炸A͑OɃECX`FbN͕KsĂBECXƂẴfobOoɂċĉ
st@CΏۂƂECXƂẮAst@CăR[hߍރ^Cv悭mĂ܂Aꕔ̃ECXɂ͎sĂvZX̐DÃvZXɏECX̃R[hsēIɊEjŝ܂B̃vZX̐D@͕܂A̓̈ɁAfobKƂă^[QbgvZXɃA^b`@܂B̂߁A\tgEFAJ҂ɂẮA\tg̓IECXɑΏ邽߂ɁAfobOĂ邱Ƃo@\\tgɎP[X܂BʓIɁAt[EFAŃfobOo@\Ăꍇ́AECX̎ȖhړIƍlčxȂƎv܂B
fobM[̃ECXoOɂ郌WXgjɔāASɓƗʼn͂sB
z}V\z\tgwVMware Workstationx̎gp߂܂B̃\tǵA鉼z}V\z\tĝȂł@̍ČɗDĂ܂B܂AwVMware Workstationxł̓ZbVōsSĂ̑ɖ߂XibvVbg@\邽߁AOSN[CXg[̏Ԃʼn͂邱Ƃ\łBȂAz}V(QXgOSFWindowsMe/2000/XP)Ŏł́AwOllyDbgx͖Ȃ삵܂B܂Ã\tgƂāAwWindows Virtual PCxEwVirtual PC 2007x܂B ̏ꍇWindows XP SP2ŁwVMware Workstation 7xƁwVirtual PC 2007x̗CXg[Ă܂Aɓ̕s͐Ă܂BwVirtual PCxȊOɂAwVMware WorkstationxJJĂt[EFAwVMware PlayerxAwVirtualBoxxp邱ƂɂAz}Vp͊ō\z\łB݂́wVMware Playerx͉z}V쐬ɑΉĂ܂B
{IɁAz}V\z\tg̃QXgOSɂ́ALOSgp܂BAJ҂̃\tgEFA݊mFpɔzzĂAwVirtual PCxp̃QXgOSC[Wgp邱Ƃ\łB
Internet Explorer Application Compatibility VPC Image(p)
wVMware WorkstationxwVMware PlayerxpAQXgOSŎsĂAvP[VzXgOSVMwarevZXƉ͂Av[`ɂẮAwuVMwarevptXN[^Q[ւ̑ΏxQƂĉB
fobM[牼z}V\z\tgŎsĂ邱Ƃo邱Ƃ́AwVMwarexƁwVirtual PCx̂\łB̏ꍇAwVMwarexȂIN߂gwVMwarexL̃|[g̗Lɂ錟oAuVMwareUser.exevEuVMwareService.exevwVMwarexL̃vZX̗LAhCouvmhgfs.sysv̗Lɂ錟oz肳܂B
ȂAwVMwarex̐Vo[Wł́AzPCł邱ƂoȂ߂́AȐݒsƂ\łB̏ꍇVMXt@CɈȉ̐ݒ݂܂B̌AoȂmFȂAKvɉĈȉ̂svȐݒ폜Ă܂B
oTFVMX-file parameters - Advanced parameters
monitor_control.disable_directexec = "true" monitor_control.disable_chksimd = "true" monitor_control.disable_ntreloc = "true" monitor_control.disable_selfmod = "true" monitor_control.disable_reloc = "true" monitor_control.disable_btinout = "true" monitor_control.disable_btmemspace = "true" monitor_control.disable_btpriv = "true" monitor_control.disable_btseg = "true" monitor_control.restrict_backdoor = "true" isolation.tools.getPtrLocation.disable = "true" isolation.tools.setPtrLocation.disable = "true" isolation.tools.setVersion.disable = "true" isolation.tools.getVersion.disable = "true"wVirtual PCxȂAOnh\zŁAwVirtual PCxgpȖ߂ŃIyR[hu0F3F070Bv(x86ƂĂ͕sȖ)sʂɁAo\ȃP[X܂B
֘AāAΏۃAvP[Vs̃t@CEWXgȂǂĎAsVXeւ̕ύXez邱ƂŁAVXeAvP[VsȌԂɕ\ȃ^Cṽ\tggp\łBÂ悤ȁuTh{bNXvȂǂƌĂ\tǵAsΏۂ}EFȀꍇɑRuAVXȅԂɕłȂȂP[Xl܂B͑ΏۃAvP[V̈SmFłȂȂAz}V\z\tggp邱Ƃ߂܂B
͎ɃfobM[st@CEWXǧʂȒPɊmFB
̂悤ȃAv[`ł́ACӂ̃^C~OŃt@CWXg̃XibvVbg쐬AقȂ^C~Oō쐬2̃XibvVbgr邱ƂŁAt@CуWXg̕ύXӏ\\tggp܂B̏ꍇwFindSetxVer1.6gpĂ܂B܂AwSystemExplorerx̋@\Ă܂BWXgւ̑Ď邱ƂɓwWXgԌxwRegFromAppxȂǁAɂ̃\tg܂BȂAA^CŃt@CEWXgĎꍇ́AwProcess MonitorxgpĂBwProcess Monitorx́AʓIȃt@C̓ǂݏł͂ȂALoadLibraryȂǂɂADLLt@C̃[h̃j^Oɂgp\łB
fobKo@ĂB
\IȃfobKo@ƂẮAJ[l[hfobKop̂̂܂߂Ė20ޒmĂ܂B̂AvO}ȒPɎv悤Ȍo͈ȉBApbP[W\tgAPCQ[уVFAEFÃvO}́A[U[_ł̓̈SmۂƂ_ŁAMicrosoftĂȂgbL[ȃfobOo@̎ɂ͏ɓIł(FDŎvO}݂܂)BߔNł́AvOR[hƂĂ̎ł͂ȂAfobKoEΏ@\tpbJ[̎gpɂfobKoƂP[XȂ܂BȂ݂ɁA}EFAɂ̓fobK{ĂP[XȂȂ߁Ã\[XR[hŎHIȃfobKo@wł郊o[XGWjA݂̕܂BȂA݂ł́AڍׂȃfobKo@ɂĂ̗LpȎlbgŌJĂ܂B̂߁ATCg̉Ƃ킹āAL̎Qlɂ邱Ƃ߂܂BA̎lbgŌJĂȏAłɂ̎@Ă邱ƂAɔW@҂ݏoĂ\lĂB
Windows Anti-Debug Reference
An Anti-Reverse Engineering Guide
1.IsDebuggerPresent
Windows98ŎꂽAPIgA\tgEFA͎fobOĂ邩ȒPɒm邱Ƃo܂B̖̊߂l[łȂfobOĂ܂B̌o@͊ĂяoUȂA͎ɗeՂɔ\łB ȂAWindowsXPT[rXpbN1ŎꂽACheckRemoteDebuggerPresentœvZXfobOĂ邩ׂ邱Ƃ\łB
IsDebuggerPresentgpɁAŃvZX֘A(PEB̃oϐBeingDebugged)擾āAfobOĂ邱Ƃo\ł͂܂AOAvP[VfobOoȒPɖ铙̖肪AHΌʂ̖ʂŌɌ܂BȂANTnOSł́ÃvZX֘AȈՂɎ擾\ɂAlCeBuAPINtQueryInformationProcessRtlGetCurrentPeb܂B{IɁAAvP[VgPEBQƂ̂́AuȂƂ悤ƂĂvƔfĂ悢ł傤B
2.zfoCXhCoo
͔rIÂo@łASoftICETRW2000̌oȂǂɎgp܂BzfoCXhCoACreateFileŃpX̓ItɂČôłBȂAꕔ̃ZLeB\tǵASoftICĚou}EFAƂċ^킵vvfƔfĂƂ݂܂B
zfoCXhCo̎w "\\\\.\\zfoCXhCo"Ƃ`ōs܂B
BOOL IsDebuggerLoaded()
{
HANDLE hFile;
hFile = CreateFile("pX̓It̉zfoCXhCo",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hFile != INVALID_HANDLE_VALUE) {
CloseHandle(hFile);
return TRUE;
}
return FALSE;
}
st@CŎQƂ鉼zfoCXhCo̗͈ȉB
Ql܂łFilemonERegmonProcess Monitor(Ql)̕L܂B
\\.\TRW
\\.\SICE
\\.\NTICE
\\.\FILEVXD
\\.\FILEMON
\\.\REGVXD
\\.\REGMON
\\.\Global\ProcmonDebugLogger
3.EBhENX擾
OllyDbǵÃEBhENXuOLLYDBGvƂȂĂ邽߁AFindWindow(WindowNULL)AEnumWindowsGetClassNamepŌo\łB
4.INT3T[`
\tgEFAvZX̃W[GAɂR[hZNVA^C}䓙ŒIɎŃT[`āAoCif[^INT3(0xCC)ƂȂĂӏ̐JEgAst@CɕۑĂIWĩJEglƔr邱ƂŁAINT3ɂu[N|Cgݒo܂BlɁA INT3̓R[hZNṼ`FbNT(PZEXORECRC-32EMD5)ɂ鎩ȉoɂqbg܂B
T[``FbNTsȏAR[hZNVւ̓ǂݍ݃ANZX_ɒڂĂ(FhCogĕォ`FbN@)B
5.胁GÃANZX擾
VirtualQuerypĎȃvZX̓胁GÃANZX擾A{肦ȂɂȂĂꍇ̓ANZX̃u[N|Cgݒ肳Ăi邢͉炩̃vZXjƔf܂B܂AȃvZXɑWriteProcessMemorygpăANZẌٕςT邱Ƃ\łB
6.\OnhpfobOo
̌o@gpꍇAtAZuR[hXgɂ͍\Onh̐ݒ̂߁uMOV EAX,DWORD PTR FS:[0]vƂuFS:[0]v܂ރR[h܂B
// C++
void CDebugTest::IsDebuggerWithSEH()
{
__try {
//DebugBreakgp\炳܉߂
//DebugBreakProcesśAvZX-1ł͂Ȃ"A"nhwł肭Ȃ
//EXCEPTION_SINGLE_STEP
RaiseException(EXCEPTION_BREAKPOINT, 0, 0, NULL);
} __except(GetExceptionCode() == EXCEPTION_BREAKPOINT ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
MessageBox("No debugger attached.","Info",MB_OK);
return;
}
//PEB̃oϐBeingDebuggedɂ͈ˑȂ
MessageBox("Debugger attached!!","Info",MB_OK);
}
7.GetThreadContextpn[hEFAu[N|CgofobOWX^ł͂ȂėpWX^ȂCCAZup邱ƂŊȒPɎ擾\łB
// C++
void CDebugTest::IsDebuggerWithContext()
{
HANDLE hThead = GetCurrentThread();
CONTEXT ct;
ct.ContextFlags = CONTEXT_DEBUG_REGISTERS;
if(GetThreadContext(hThead, &ct)){
//ۂDr0Dr3܂Ń`FbN
//fobOWX^͈ꕔ̃hCoZLeBc[gp邱Ƃ
//̂0ۂŃ`FbNĂ͂Ȃ
//̃AhX͈͂͂܂ŖڈƂĂ̗
if( (ct.Dr0 < 0x3F000000) && (ct.Dr0 >= 0x10000) ){
MessageBox("HBP(Dr0) is active!!","Info",MB_OK);
//fobOWX^̃NA
ct.ContextFlags = CONTEXT_DEBUG_REGISTERS;
ct.Dr0 = 0;
SetThreadContext(hThead, &ct);
}
else
MessageBox("HBP(Dr0) is inactive.","Info",MB_OK);
}
}
8.lCeBuAPINtQueryInformationProcessgpfobOo̊ZwQuerySystemInformatioñlCeBuAPIŃfobOo\łÅ͏IɌ݊\邽߁AʓIȃAvP[V֎\͒Ⴂƍl܂B
// C++
//̎@Win9x/Meł͕s
void CDebugTest::IsDebuggerWithDebugPort()
{
//CheckRemoteDebuggerPresentƓl̏
HANDLE hProcess = GetCurrentProcess();
enum PROCESS_INFO_CLASS { ProcessDebugPort = 7 };
HANDLE hPort = 0;
if(NT_SUCCESS(NtQueryInformationProcess
(hProcess, ProcessDebugPort, &hPort, sizeof(hPort), NULL)) ){
if(hPort)
//PEB̃oϐBeingDebuggedɂ͈ˑȂ
MessageBox("Debugger attached!!","Info",MB_OK);
else
MessageBox("No debugger attached.","Info",MB_OK);
}
}
9.菈̌oߎԊĎɂfobOoɉ͂ł낤̏̎sɗvԂGetTickCountȂǂŌvA炩ߎw肵臒l(E)ƃfobOĂ(u[NXebvssꂽ)Ɣf܂BΏۃvȌƂāA{KvƂ͍lȂԊ֘AAPI(Ql)̌ĂяoƖ߂l̑召rɒڂĂB
̃fobOo@́AAĂGetTickCountgp܂B̂߁Aw݂݃nP[xĂΏۃvZX́usxv@\pāAGetTickCountx[Xł̎Ԍo߂ɒ[ɒxAvOR[h̉ςȂőΏłP[Xƍl܂BAPIp~bPʂ̌oߎԎ擾́APCQ[ł̏^C~O䎞Ȃǂɂs܂APCQ[̏ꍇ́A萸x̍timeGetTimegp̂{ƂĂ܂B
ȂAtAZuR[hXgł́AGetTickCountĂяoƖ߂l̒Pȑ召r͉͂eՂȂ߁AWindows Vistaȍ~ł́AAhX0x7FFE0000ɂKUSER_SHARED_DATA\̂́AołTickCountȂǂڎQƂ\܂(Ql)B
10.evZX̌
̃vZX̐evZXɂāAvZXIDst@CpX擾AɎst@CύXɑΏ邽߃\[X̃o[W(t@C̐AAt@CȂ)QƂ܂B̓fobKAeAPItbNs\tgȂǂNꂽꍇɗLȌo@łBȂANɃfobKA^b`ĂAevZXfobK̃vZXɕύXł͂܂B
̏ꍇ́A܂GetCurrentProcessIdŎg̃vZXID擾܂BQl܂łɁAȉ̃CCAZuAlNtCurrentTeb̖߂l+20hAvZXID擾Ɏgp\łB
DWORD m_ProcessID;
_asm{
mov eax, FS:[0x18]
mov eax, [eax+0x20]
mov m_ProcessID, eax
}
ɁACreateToolhelp32SnapshotProcess32First/Process32NextgāÃvZXɂPROCESSENTRY32\̂̃oth32ParentProcessID擾܂BāAevZX̃vZXIDɑāACreateToolhelp32SnapshotModule32FirstŁAevZX̃CW[̃t@CpX擾܂BȂAevZX̃vZXID́ANtQueryInformationProcessł擾\ł(PROCESS_BASIC_INFORMATION\̂̃oInheritedFromUniqueProcessId)BɁA擾pXgāAGetFileVersionInfoSizeAGetFileVersionInfoVerQueryValueŁAo[W̏ڍׂ擾܂BƂAwOllyDbgx̃o[Ẃuv́uOllyDbgvƂȂĂA̕ɎfobOĂ邱Ƃo\łBfobKł̂̌o@̉ƂẮA\[X̃o[WςA\[XZNV𑀍삷pbJ[Kp邱Ƃz肳܂B
fobOĂꍇւ̑ΏƂẮAevZXGNXv[ȊÕvZXȂAevZXɑāApTCg[`gāAfobOsXbhKgpWaitForDebugEvent̃GgtbNÃvZXIDɂDebugActiveProcessStopĂяo܂BpTCg[`͈ȉ̂悤ɂȂ܂B
;tbN̊Gg̃Wv(CW[̃R[hZNVgp̈擙) PUSHAD PUSHFD PUSH ̃vZXID CALL DebugActiveProcessStop̃Gg̃AhX POPFD POPAD (JMP̃j[jbNŏ㏑Gg̃R[h) JMP GgɂÃvZXfobOĂȂAfobKfobOs\ɂ邩AfobK̏ɂẴ͎vZXI邱ƂɂȂAɂĂfobKƂȂ܂B
mFFWindows Vista Home Premium (32Bit) Service Pack 2
11.INT߂ɂfobKo
INT3h(BCHKo)AINT2FhAINT41hAINT68hp܂BfobKo@ƂĕKM̍̂ł͂܂B
INT߂pfobKo肭܂(FWindowsXP)B
INT3hAINT2FhAINT41hAINT68hpfobKo@OS̃o[W₻̑̏Ɉˑ邽߁AʓIȃ\tgEFAւ̎͂߂܂BwOllyDbgx̃vZXoĉ͂WQ^CṽECX͂
{IOllyDbg̃vZXo@ƂẮAWindowsŎsĂvZẌꗗ擾āAevZX̃`FbNɂOllyDbgNĂ邩f܂BAPIpăvZXꗗ擾@5ނ܂Aʏ͈ȉ3̕@̂ꂩgp܂BEProcess32First(Next)Tool Help APIgp
EEnumProcessesProcess status API(PSAPI)gp
EOSێptH[}Xf[^烌WXg̕sL[ƂĎ擾
łȒPȃvZXoAv[`ƂẮAWindowscvZX̓vZX̎st@CƂȂ邽߁APOllyDbg̎st@Cʂ̂̂ɕύXANɃG[bZ[W͏ỗvZXύXOllyDbg̃vZX͌oȂȂ܂B
ASvZX̃vZX̃W[GAœ蕶P[XȂǁAڍׂOllyDbgvZXosĂA}EFAvZXo[`̖j~鋭łȉĂꍇɂ́AAPIĂяoւ̑st@C̃l[Ƃ͕ʂ̃Av[`sKv܂B
̂悤ȃP[Xł́A܂Â悤ȉ͑邽߂́Aȃc[܂OllyDbgvOCgp܂B̂悤ȃc[͈ȉ̃TCgȂǂœ\łB܂Â悤ȑΉ͑pOllyDbgvOCƂẮAwOlly AdvancedxAwStrongODxAwPhantOmxсwOllydbg Anti Anti Hardware BreakpointxȂǂ܂B
Collaborative RCE Tool Library - Category:Tool Hiding Tools
̑Ή͑c[OllyDbgvOCőΏłȂƂ́ArootkitƌĂc[pāAWindowsێvZX̃XgςvZXꗗ擾pAPI𑀍삷邱ƂŁAOllyDbg̃vZXWindowsʼnBĂ}EFẢ͂sƂAv[`Lƍl܂BCӂ̃vZX̉B@\rootkit͈ȉ̂̂Ȃǂ܂BȂAvZX̉B̓ZLeB[Ȗ˂Ȃ߁AZLeB\tgɂĂ͂̂悤rootkit̂ECXgC̈Ɣf邱Ƃ܂BLrootkit́A炪ǂ̂悤ȃc[ł邩\ŁAKȂ̐ӔCɂēƎgpsĉB
EFU rootkit/FUto rootkit (DKOM: Direct Kernel Object Manipulation)
ERedkod Rootkit (Ring3x[XAPItbN)
lɁApveNg{ꂽICQ[ṕAقƂrootkitƓsAkAWAQ[͕⏕c[gpƂI܂BƂƃQ[pc[ł胊o[XGWjAOƂʂł͒mxႭApł݂ȂƂƂArIɂƂ_܂B
ȂAٍ̔ėpvZXGfB^fobKw݂݃nP[xł́AFU rootkit̂悤DKOMʼnBꂽvZX̃EBhEɃvZXID擾āABĂȂvZXlɉ͂邱Ƃ\łB܂Aw݂݃nP[x̃ptH[}Xf[^vZXꗗ擾@\AvZXIDŃvZXꗗ擾@\gpARedkod Rootkitp悤APItbNʼnBꂽvZXłAvZXID擾E͂邱Ƃł܂B̓ȃvZX@\́Aw݂݃nP[xNɕ\vZXXgŁAENbNɂ\|bvAbvj[Ăяo܂B
ɁAw݂݃nP[xłWindows XP/2000ṕAvZXKernel32.DLLENtdll.DLLW[AJ[lXy[Xł Service Descriptor Table (SDT) ɂAPItbN̉@\ĂArootkitĂAPItbNpe͑ɑΏ\ȃP[X܂B
Ȃ݂ɁAECẌʓIȉ̓Av[`ɂẮAȉ̃y[WQlɂȂ܂B
SymantecAECX̍őOuSecurity ResponsevJ
uV}ebNA{ɂECX̓[Jv
VTSecurityWatch : }EGA͂i1`j
CCI: Windows Season2 m̃oCỉ
OSŃfobK삵Ƃo@Ă
̏ꍇ́AOSŎsĂSẴvZXŁAAPItbNpăfobKɊ֘AAPI(DebugActiveProcess)̌ĂяoĎ܂BAPItbNɂAfobK̓Ɍ炸AvZX̃I[v⋭IAvZX̓ǂݏAvZXXbh̍쐬AAPIgpFXȏĎ\łBĎɎ~܂炸Ȃ쓙ɂAPIĂяo̖ł܂BAPItbNSʂɂĂ̓PW̃TCgwKENJI'S HOMEPAGExނ̒wnbJ[EvO~OS@UҁxQlɂȂ܂BɂlbgAPItbNɊւ鎑邱Ƃł܂B
APItbNɊւāAWindows2000/XPȍ~Ƃꕔ̃ZLeB\tggCł́AĎvZX̎st@CɃpbJ[gpĂP[XɑΏ邽߂ɁAĎvZX̃CW[IATł͂ȂAX^uDLL(evZXɓǂݍ܂ꂽVXeDLL̃Rs[)ɂAPI̊JnAhXȍ~̃oCif[^āAevZXɃ[hĎpDLL̏ɃWvĂ܂BWindows2000/XP/Vistaтȍ~ɂĂ͑SẴX^uDLLAvP[VLAhX͈͓Ɏ܂邽߁Â悤ȏ\ɂȂ܂BWindows9xłKernel32.DLLȂLjꕔ̃VXeDLL̃W[AhX̓AvP[VLAhX͈͊OƂȂ邽߁AʓIȃAvP[V炻̃VXeDLLɑAhX̃oCif[^͓ǂݍ݂͉\ł͂ł܂BȂAAPItbN@ɂāAAPIĂяoĎ邽߂̃R[h́AĎpDLLł͂ȂtbNΏۃvZX̉zAhXԂɏ̂gpƂ@܂B
APItbNsAvP[VtAZuĂꍇ́AĎΏۃvZXɂAPI̊JnAhXł͂ȂAAPI̊JnAhX4߂̃j[jbN̐擪AhXāAĎpDLL̏ɃWvƂƂ\łB̏ꍇ͊ĎpDLL̏PUSHAD/POPAD+PUSHFD/POPFD߂gď̈S߂ƍl܂BKAPI̊JnAhXKv͂ȂƂɒӂĉB
[U[[hłAPItbNpOSł̃fobK쌟óAǂ̂悤ȏłɌołł͂܂B{IɁAWindows9xłfobKpbJ[ňk/ÍvZXłIAT̉͂KvȃP[Xł́ÃfobK쌟o͓Ȃƍl܂B܂AAPI̊JnAhXȍ~̃oCif[^錟o@ł́AfobKfobK֘AeAPI̊JnAhXȍ~̃oCif[^16oCgxAw炩APItbNĂȂN[ȏŎ擾ĂxIWĩoCif[^pčpxŏ߂ƂɂAAPItbNɂfobK쌟o邱Ƃ\łB
Ȃ݂ɁAꕔ̃ZLeB\tggĆA[U[[hłAPItbNł͂ȂAJ[l[hŃhCoSDT(Service Descriptor Table)hCo̊Ɍq悤Ă܂B̏ꍇ́AwWin2K/XP SDT RestorexpSDT߂ƂŖ\łBȂAx64p64rbgWindowsł́A̎dlケ̂悤SDT(IDTAGDT)͍̏s܂B
QlZLeB\tgAPItbNΏۃXg(ꕔ)
[kernel32.dll]
CreateProcessInternalW
DebugActiveProcess
GetProcAddress
LoadLibraryExW
MapViewOfFile
MapViewOfFileEx
MoveFileW
OpenProcess
ReadProcessMemory
VirtualProtect
VirtualProtectEx
WriteProcessMemory
[user32.dll]
GetWindowThreadProcessId
PostMessageA
PostMessageW
SendInput
SendMessageA
SendMessageW
SetCursorPos
SetWindowsHookExA
SetWindowsHookExW
keybd_event
mouse_event
[ntdll.dll]
NtOpenProcess
NtQuerySystemInformation
NtSuspendThread
NtTerminateThread
RtlGetNativeSystemInformation
ZwOpenProcess
ZwQuerySystemInformation
ZwReadVirtualMemory
ZwSuspendThread
ZwTerminateThread
ZwWriteVirtualMemory
A^b`ău[N|Cgݒ肷ƁAu[N|Cg@\ȂɋI\tgEFÂłB
ĂȂ̂ł܂ŐłA\Onh (SEH: Structured Exception Handler) pfobKł\܂BtAZuR[hXgŁA\OnhɓL̃ZOgWX^ւ̃ANZXǂĂ݂ĂB ȂA͎҂tAZuR[hXgŁuFS:[0]v邱Ƃz肵āAӐ}IɁuFS:[ėpWX^]vƂĂP[X܂̂ŒӂKvłBfobKŋN^A^b`ƁAfobM[IĂȂ̂ɃfobKfobM[IƔF܂B
܂ȃP[XłAfobK̃fobOAv[`̕@ƃfobM[̃fobK̑gݍ킹ɂA̗lȏ邱Ƃ܂BfobKł̃Av[`@ςĂ݂ĂBwOllyDbgx̂悤ȃfobK\uŌ̃G[v̓fobM[̂ǂɊi[Ă̂łH
NTnOSł́uThread Environment Block (TEB)vA9xnOSł́uThread Information Block (TIB)vƌĂAXbh̃[Ji[̈łB̃f[^ubN̐擪AhX̓ZOgWX^pāAuFS:[18]vŎ擾邱Ƃł܂B܂AuMOV EAX,FS:[18]v̏sAlCeBuAPINtCurrentTebgp@܂BȂAw݂݃nP[xɂ́A͑ΏۃvZXPEBTEBp̍\̕\@\Ă܂( j[[fobO][PEB/TEB\] )BwOllyDbgx\uŌ̃G[ṽG[R[h́uFS:[34]v(Win2k/XP/Vista/7)܂́uFS:[60]v(Win9x/Me)̒lłBۂɁÃG[R[h擾AWindows 7łGetLastError͈̓ȉ̂悤ɂȂĂ܂B
MOV EAX,FS:[18] MOV EAX,[EAX+34] RETNÃG[R[h̒lGetLastError̖߂lƈvȂP[X܂BWindows̈ꕔ̃o[Wł̂GetLastErrorŃG[R[h擾\APIɒӂĉBȂAwXyV˂܂܂TVxɂ̓G[R[h{̐ɕϊ@\Ă܂(j[[VXe][ғAvP[V]̃_CAO)B
Ȃ݂ɁAfobM[̃CXbhŁuFS:[04]vƁuFS:[08]v̒lX^bNGA肷邱Ƃł܂B
͑ΏۃvZXPEB(Process Environment Block)̏擾
VXegpAvZXɊւi[\PEB(Process Environment Block)ɂẮAWindowsXP SP2ŎdlύXꂽ߁ANTnOSɂĕK]̂悤ɊevZX̓AhX(0x7FFDF000)ȍ~ɂƂ͌܂BPEB̃AhX́AlCeBuAPIłNtQueryInformationProcessgp邱ƂŎ擾\łAvbgtH[SDK̎ł͂̊̎dlIɕύX\ĂAvO̓c[ւ̎͒ӂKvłB܂A͑ΏۃvOł́AMicrosoftĂȂlCeBuAPIłARtlGetCurrentPebgp邱ƂŎPEB̃AhX擾ł܂BȂAw݂݃nP[xɂ́A͑ΏۃvZXPEBTEBp̍\̕\@\Ă܂( j[[fobO][PEB/TEB\] )B
̃Av[`ƂẮAVirtualAllocExAWriteProcessMemoryCreateRemoteThreadpĉ͑ΏۃvZX̃XbhƂĈȉ̗lȃAZuR[hs邱ƂŁAPEB̃AhXi[FS:[30]̒lo͂AReadProcessMemorył̒l擾邱Ƃ\łB
QlPEB̃AhX擾၄
mFFWindows XP 32bit SP2, Windows 7 32bit SP1 (Windows9x/Meł͓삵܂)
ӁF
EAhX403000́A͑ΏۃvZX̃vZXɊmۂGÃAhX
Eȉ́u00403000-648B0530000000vƂ́Aw݂݃nP[xwXyV˂܂܂TVxŎgp\ȃvZXp̉R[h(p̃XNvg)łB
;TEB(Thread Environment Block)̃AhX+30hDWORD̒l ;MOV EAX,FS:[30] 00403000-648B0530000000 ;MOV [403020],EAX 00403007-890520304000 ;RETN 0040300D-C3 ;TEB̃AhXFS:[18]gp ;vbgtH[SDKwinternl.hTv͂̕@gp ;RtlGetCurrentPeb̓l ;MOV EAX,FS:[18] 00403000-648B0518000000 ;MOV EAX,[EAX+30] 00403007-8B8030000000 ;MOV [403050],EAX 0040300D-890550304000 ;RETN 00403013-C3QlIsDebuggerPresent
PEB̃AhX擾ɔAIsDebuggerPresentTEBoRŎQƂAPEB\̂Ɋ܂܂vZX̔fobOwoϐBeingDebugged̏ւ(10)ɂAɂfobOo̖\ɂȂ܂B
;MOV EAX,FS:[30] 00403000-648B0530000000 ;MOV BYTE PTR [EAX+2],0 00403007-C6800200000000 ;RETN 0040300E-C3QlOSo[WU
PEB̃AhX擾ɔA͑ΏۃAvP[VGetVersionExŎ擾Windows̃o[WU邱Ƃ\łB
;MOV EAX,FS:[18] 00403000-648B0518000000 ;MOV EAX,[EAX+30] 00403007-8B8030000000 ;Windows XP ;MOV DWORD PTR [EAX+0A4],5 ;OSMajorVersion 0040300D-C780A400000005000000 ;MOV DWORD PTR [EAX+0A8],1 ;OSMinorVersion 00403017-C780A800000001000000 ;MOV DWORD PTR [EAX+0B0],2 ;OSPlatformId->萔VER_PLATFORM_WIN32_NT 00403021-C780B000000002000000 ;RETN 0040302B-C3QlPEB\́
ӁFȉ͌̏ł͂ȂAWindows 8ȍ~ŃoύX\܂B܂ŎQlxƂĉB
typedef struct _PEB {
BOOLEAN InheritedAddressSpace;
BOOLEAN ReadImageFileExecOptions;
BOOLEAN BeingDebugged;
BOOLEAN Spare;
HANDLE Mutant;
PVOID ImageBaseAddress;
PPEB_LDR_DATA LoaderData;
PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
PVOID SubSystemData;
PVOID ProcessHeap;
PVOID FastPebLock;
PPEBLOCKROUTINE FastPebLockRoutine;
PPEBLOCKROUTINE FastPebUnlockRoutine;
ULONG EnvironmentUpdateCount;
PPVOID KernelCallbackTable;
PVOID EventLogSection;
PVOID EventLog;
PPEB_FREE_BLOCK FreeList;
ULONG TlsExpansionCounter;
PVOID TlsBitmap;
ULONG TlsBitmapBits[0x2];
PVOID ReadOnlySharedMemoryBase;
PVOID ReadOnlySharedMemoryHeap;
PPVOID ReadOnlyStaticServerData;
PVOID AnsiCodePageData;
PVOID OemCodePageData;
PVOID UnicodeCaseTableData;
ULONG NumberOfProcessors;
ULONG NtGlobalFlag;
BYTE Spare2[0x4];
LARGE_INTEGER CriticalSectionTimeout;
ULONG HeapSegmentReserve;
ULONG HeapSegmentCommit;
ULONG HeapDeCommitTotalFreeThreshold;
ULONG HeapDeCommitFreeBlockThreshold;
ULONG NumberOfHeaps;
ULONG MaximumNumberOfHeaps;
PPVOID *ProcessHeaps;
PVOID GdiSharedHandleTable;
PVOID ProcessStarterHelper;
PVOID GdiDCAttributeList;
PVOID LoaderLock;
ULONG OSMajorVersion; //+A4h
ULONG OSMinorVersion; //+A8h
ULONG OSBuildNumber; //Word*2
ULONG OSPlatformId; //+B0h
ULONG ImageSubSystem;
ULONG ImageSubSystemMajorVersion;
ULONG ImageSubSystemMinorVersion;
ULONG GdiHandleBuffer[0x22];
ULONG PostProcessInitRoutine;
ULONG TlsExpansionBitmap;
BYTE TlsExpansionBitmapBits[0x80];
ULONG SessionId;
} PEB, *PPEB;
֘AāA̓c[GetThreadContextpĉ͑ΏۃvZXɑXbh̃ZOgWX^擾ς݂łꍇ́AGetThreadSelectorEntryTEB̃AhX擾āAvZXƃXbh̊eQƂ邱Ƃł܂B܂AWindowsXPSP1ȑOWindows2000łACXbhTEB̃AhX+1000h邱ƂPEB̃AhXɂȂ܂B
LDT_ENTRY ldt = { 0 };
GetThreadSelectorEntry(hThread, ct.SegFs, &ldt);
DWORD dwTebPtr = (ldt.HighWord.Bytes.BaseHi << 24)
| (ldt.HighWord.Bytes.BaseMid << 16)
| (ldt.BaseLow) + 0x18;
DWORD dwReadBytes = 0, dwTEBAddr = 0;
ReadProcessMemory(hProcess, (LPBYTE)dwTebPtr,
&dwTEBAddr, sizeof dwTEBAddr, &dwReadBytes);
Windows XP Service Pack 2Ŏf[^sh~@\Œӂׂ_邻łc
̃f[^sh~iDEPFData Execution Preventionj@\ɂAR[hs郁GÁAKANZXƂĎsKvɂȂ܂BႦApTCg[`ߍރGAƂāAR[hZNVȊÕZNV̋̈gpꍇÃZNV܂ރGAɂ̓ANZXƂĎsK{ƂȂ܂B܂ApbJ[ɂpbNꂽAvP[VANɎs/[`i[ZNVlłB\Ȍ͍sĂ܂A ̂悤ȃP[Xł́APEwb_Ŏw肳ꂽYZNVCharacteristicsƂĎsIMAGE_SCN_MEM_EXECUTE(0x20000000)_aŒljݒ肷邱ƂőΏ\ƍl܂Bw݂݃nP[xtPEGfB^wUMPExgp邱ƂŁAZNV̏ڍ̕\⑮ύX\łB܂AwUMPEx邢́AwXyV˂܂57xPEt@Cč\z@\( j[[t@C][PEt@Cw肵čč\z] )gAsyѓǂݏCӂ̖OƃTCỸZNVAst@Cɒlj邱Ƃł܂BW[GA̎sZNVȊÕGAł́AR[hs邽߂ɂVirtualAllocɂ郁蓖ĎPAGE_EXECUTE̎stKv܂BVirtualAllocExɂ鑼vZXł̃蓖ĂAłɊ蓖ĂꂽGÃANZXύXɂĂlłBȂAvZXq[vX^bNGAł̃R[hśAsƂȂ܂BAHeapCreateő1ɒ萔HEAP_CREATE_ENABLE_EXECUTE(0x00040000)_aŐݒ肷邱ƂɂAR[hs\ȃq[v̍쐬\łB
f[^sh~@\삵ĂAs̖GAŃR[hsꂽꍇAOƂĂ͏]̃ANZXᔽlSTATUS_ACCESS_VIOLATION (0xC0000005)܂BA]̃ANZXᔽƈقȂAOnh̃T[`ɃvZXI邱ƂɒӂKvłB܂AfobKpẴf[^sh~@\ɂ蔭OIɖ邱Ƃ͂ł܂B
ȂÃf[^sh~@\ɂ̓AvP[Vw肵ĖIvVĂ܂Bݒ@ɂẮAuvO͈Q&AvQƂĂB
wOllyDbgx̃ZLeBz[ɂċĂ
OllyDbg1.10yщߋ̂̃o[Wł́AfobM[OutputDebugString̑Ɂu%svu%08Xv̏w蕶܂w肵ꍇɁȀô͕܂ܕ\Awsprintfs悤ɁAX^bN̓eɂ̏w蕶ϊĕ\ƂoO܂B̂߁Aӂ̂fobM[Aw蕶ʂɊ܂ޕOutputDebugStringŏo͂ꍇAOllyDbg̓NbV邱Ƃ܂B
}IȑΏƂẮAfobM[OutputDebugStringĂяo邱Ƃ܂B邢́ǍĂяoɃu[N|Cgݒ肵ĂāA̓emF悤ɂĂƂLȑΏƍl܂B
OllyDbgst@CɂΏ̕@́ALQƂĉBAȑΏł͂܂B
ȂAw݂݃nP[x̃fobKɂ́AL̃ZLeBz[͂܂̂ŁAw݂݃nP[xł炩߃fobO̎擾Ă݂邱Ƃ\hƂėLłB܂Aw݂݃nP[xɂ́AfobKƂđΏۃvZXɃA^b`ɁAfobOo͕擾郂j^[@\(j[[fobO][fobOo͂Ď] )Ă܂B
wOllyDbgx̉łƂ͂ǂ̂悤Ȃ̂łH
OllyDbg1.10͕́wŁxlbgŔzzĂ܂B͑wOllyDbg ForumsxȂǂŗLuJpb`gݍAlbgŌJĂOllyDbgvOCȂǂ̂łB܂A\[XςĂP[X܂AOllyDbg̋@\◘ɂ͂قljêȂ̂wǂłBɁAA`fobOAłEɂĂlj@\Aۂ͂̂悤ȋ@\OllyDbgvOCAst@CςƂƂ悤łBm̃vOCɋUAӂ̂vOC\lAlbg̏osȍĔzzwOllyDbgx̓͂߂ł܂Bpb`ɂĂ͊Tˈȉ̂̂gݍ܂Ă܂Bȉ̃pb`R[hɂwOLLYDBG.EXEx̏́AwXyV˂܂57x́uȈՃoCit@Cv@\(j[[t@C][ȈՃoCit@C] )ŊȒPɍsƂ\łBuV{T[o[gp\vɂẮALQƂĉB
*OllyDbg1.10pb`
FILENAME OLLYDBG.EXE
*V{T[o[gp\
00090709: 10 37
0009070A: 12 02
0009070B: 00 03
0009070C: 00 80
000907EC: 74 EB
*OutputDebugString֘AoOC
*ӁFȎ@̂߈ꕔ܂
*2oCg͍lĂ܂
0003094C: 83 E9
0003094D: C4 F3
0003094E: 10 E2
0003094F: 3B 07
00030950: C3 00
000AEC44: 00 51
000AEC45: 00 50
000AEC46: 00 57
000AEC47: 00 8B
000AEC48: 00 7C
000AEC49: 00 24
000AEC4A: 00 0C
000AEC4B: 00 8B
000AEC4C: 00 4C
000AEC4D: 00 24
000AEC4E: 00 14
000AEC4F: 00 B8
000AEC50: 00 25
000AEC54: 00 F2
000AEC55: 00 AE
000AEC56: 00 83
000AEC57: 00 F9
000AEC59: 00 74
000AEC5A: 00 06
000AEC5B: 00 C6
000AEC5C: 00 47
000AEC5D: 00 FF
000AEC5E: 00 20
000AEC5F: 00 EB
000AEC60: 00 F3
000AEC61: 00 5F
000AEC62: 00 58
000AEC63: 00 59
000AEC64: 00 83
000AEC65: 00 C4
000AEC66: 00 10
000AEC67: 00 3B
000AEC68: 00 C3
000AEC69: 00 E9
000AEC6A: 00 E3
000AEC6B: 00 1C
000AEC6C: 00 F8
000AEC6D: 00 FF
*EBhENXύX
*st@CύXƂ̕pʓI
000B6018: 4F 4E
000B6019: 4C 6F
000B601A: 4C 74
000B601B: 59 65
000B601C: 44 70
000B601D: 42 61
000B601E: 47 64
ȂAV{T[o[gp\ȂǁAɂĂ͏Lpb`ɂOllyDbg̈ꕔ̋@\gps\ɂȂ邱Ƃ܂Bpb`R[hs̍ۂɂ̓obNAbv̍쐬߂܂BMFC̃^CDLLGNX|[g̏ڍׂm肽
umfc90u.dllvȂǁuMFCxx.DLL(xMFCo[Wԍ) vƂt@ĆAMFC(Microsoft Foundation Class)̋LDLLGNX|[ǵADLLł͖Oݒ肳ĂȂ߁AtAZuR[hXgł͂Ă(ɐݒ肳ꂽԍ)ŕ\邱ƂɂȂ܂B̊ɂAʓIAPÎ悤ȁAۂ̋@\\ݒ肳Ă܂BVisual Studio(L)ɕtDEFt@CeLXgGfB^ŊJȀɂĖ{̊mF邱Ƃł܂BDEFt@ĆAVisual StudioCXg[tH_̈ȉ̏ꏊɂ܂B
()"C:\Software\Visual Studio 9.0\VC\atlmfc\src\mfc\intel\mfc90.def"
ȂAVisual Studio̗Lł́AMicrosoftlbgŔzzĂ]łŎp\łB
܂AMFC̃GNX|[g̉͂ɂẮAȉ̃\tg̓QlɂȂ܂B
i.j Shell Property Sheets Export/Import 32
i.j Shell Property Sheets Export/Import 32@
CÕ\tgEFA{ꉻĂ݂
ȉ̉́AfobKpvO͂̉pƂĂ̓{ꉻɂďqׂĂ܂BvO͂Ƃ̓NȂʓIȓ{ꉻł́A{IɃoCiGfB^ƃ\[XGfB^ł݂̏̂œ{ꉻs܂B\tgEFA̓{ꉻɂẮAoCiGfB^A\[XGfB^AɃvZXGfB^fobKgp邱ƂɂȂ邽߁Ae̓c[̎gwԂƂ_ŗǂoɂȂ܂BāA{ꉻƂ`Ō̂̕ɖ𗧂_ALvȂƂƂł傤BA{ꉻΏۂ̃\tgEFÁA{̂̂ł͓܂͓@\\tgEFA݂Ȃ̂ɂ܂傤B̓{ꉻo܂߂Aߋ̓{ꉻA{̂̂łނˎɂ炸Avē̊CÕ\tgEFA{ꉻĂAČꂸʂɏI܂B܂AΏۃ\tgEFAVFAEFAȂAgû߁Ałɓ{̊Ƃ|擾A{ꉻ̂̔ĂȂAOɏ\ɒĂB
ۂ̓{ꉻ́A{IɈȉ̎菇ōs܂Bߋ̎A{ꉻɂe̖AlőSĂ悤ƂAFXȋ͎҂ACfBAĉĂƂŁA{ꉻ̊x܂邱ƂȂ܂Bœw͂AuPӂɂl̈ӌɂ͎XvƂpA{ꉻ̎߂Ƃ܂BŁA(ӂɂ̂܂)l̈ӌɍE߂Ȃ悤𗥂邱ƂKvłB
ȉAPÏȂǏڍׂɂẮAvbgtH[SDKȂǂQƂĂB܂Agpc[ɂẮAWebTCgc[QƂĂB
Ώۃ\tgEFApbJ[gpĂꍇ́A҂̈Ӑ}dāAăApbNĂ܂œ{ꉻA܂͍҂ɑΉpDLL̓ȂǁAApbNȂœ{ꉻł悤v]oƂ]܂Ƃ܂B ȂAgpĂpbJ[t̂UPX̏ꍇ́AApbN|pb`u҂̑z͈͓vƍl܂BPƂẮAq̃vZX^{ꉻpb`̍쐬܂B
1.oCiGfB^Ŏst@Cf[^ZNV̕
st@C̃IWiꕶA̕TCYɎ܂悤ӂȂA{ꕶɏ܂BOANSIEUnicodeƂR[ḧႢA̕I[Ӗ00hE0000h𗝉Kv܂B[U[_ł̕₷ɁAmȓ{Ǝ̈ӖDĎgƁA[U[ɈaȂuZX̗ǂv{ꉻɂȂ܂B
gpRpCɂẮA1̕pP[X邱ƂɒӂĂBƂuOpen FilevƂAvO1ӏ͂̂̂̕A1ӏ͂́̕uFilevƂQƂƂP[XłB̂߁A{ꉻ̐iɉāAfobK邢̓vZXGfB^̋tAZugAtAZuR[hXgł̎QƕꗗmF邱Ƃ߂܂B
̒iKł̍ƍH팸̂߁A\ȂAoCiGfB^ł̕⏕c[̎߂܂B
2.\[XGfB^Ń\[X̃tHg╶
{ꉻɕāA_CAÕTCYA{^̃TCYzuAR{{bNX̃XgcTCYȂǂŁA[U[C^[tFCXǂug₷vƂɂz܂傤BΏۃ\tgEFÃo[WAbv́A\[XH팸ɂ́AwXN Resource Editor {Łxt́wResUpdatexgp\łB̏ꍇ́A\[XeweXeScopexp̃XNvg`ŕۑĂAȍ~̃o[WAbṽ\[XĂ܂B
Ql܂łɁAMicrosoft Visual C++ 2008{łŃRpCAAvP[Ṽ_CAOݒtHǵAݒł́uMS UI Gothicv9|CgɂȂĂ܂B
ȂA{^Ȃǂ̃\[X\[XZNVɊi[AvȌƂă{^Ȃǂ̃Rg[Iɍ쐬P[X܂BvO~Oł́AɃ_CAOŕ\{^GfBbg{bNXAXg{bNXȂǂuRg[vƂ܂B̏ꍇ́ACreateWindow̑1ACreateWindowEx̑2ŁARg[̍쐬ݒ肷ȉ̕()QƂ܂BAPIĂяöŁARg[̕TCYݒ肳܂B
BUTTON
COMBOBOX
EDIT
LISTBOX
3.vÕtHg쐬
ΏۃAvP[VIɃtHg쐬ĂȂAfobK邢̓vZXGfB^̋tAZugĂ̏AAhXItZbgϊʂgāA̕ύXest@CɓKpē{ꕶΉɂ܂BCreateFontCreateFontIndirectĂяöΏۂƂȂ܂BCreateFontȂA9fdwCharSet萔SHIFTJIS_CHARSET(0x80)ɁA14̎QƕuMS UI GothicvȂǎgpɉKȓ{tHgɕύX܂BCreateFontIndirectȂA1ŎQƂLOGFONT\̂̓eɑAl̏s܂B
4.vO̓IEύXӏ
AvP[VɂẮAvȌŕKvƂȂŒ蕶AvZXɓIɍ쐬EύXĎgp邱Ƃ܂B͂vOR[hɗvƍHĂÂ悤ȕ́ułv{ꉻƂlŗǂƎv܂B
5.vO̕ϊȂǂ̏C
UP[XƂẮAvO̓c[ȂǂUnicode(oCif[^)@\ŁA͕ANSIƂĔFAIUnicode֕ϊĂꍇɁAϊ̃̕TCY(oCg)APɌ̃̕TCY2{ɌŒ肷P[X܂BƂē{ŁusvANSIłUnicodeł̃TCY8oCgłAL̃P[Xł͕TCY2{ɂ16oCg̃oCif[^ƂČ邱ƂɂȂ܂(RɎs)B́AɉĂ1oCggpĂlɂƂāAANSIUnicodeɕϊΕK̃TCY2{ɂȂƂAނ́u펯vŐ(oO)łB̏ꍇMultiByteToWideCharĂяȍώ@A̖߂l(ϊ̐)gāAΏۃoCgPɌ̕TCY2{ɂĂ鏈邱ƂɂȂ܂BAvOR[h̒ƂAώGȏKvƂȂ邽߁A\Ȃ҂ɑΉ𑣂ƂI肦܂B̏ꍇ͍ґł͓mFłȂ߁AΉ߂ӔCēmFsƂɂȂ܂B
6.pb`̍쐬
ȏ̓{ꉻʂKpst@CƁAIWi̎st@CɁApb`쐬c[gē{ꉻpb`쐬܂B쐬A{ꉻώst@C̓mFApb`̃ECX`FbNsŔzz܂B
(Ql)vZXɂ{ꉻ
A{ꉻΏۂ̃\tgEFÁE{ĂꍇAst@C̃fW^ێꍇ́ÃvZX^Cv̓{ꉻpb`삷Ƃi܂BAłɕ\ς݂̃Rg[̕Ȃǂ́APȃvZXł͓{ꉻłȂƂ܂B̂߁ASetWindowTextĂяoAWM_SETTEXT bZ[WMŁAvȌƂĂ̓IȕKvƂȂP[X܂B邢́AΏێst@CNɃGg[|CgŒ~(Q)ȀԂŃvZX̃\[Xf[^܂B
܂A̎̓{ꉻɂ́A[_[vZXpb`[삷AvO~O̒mƊJKvƂȂ܂BvZXւ̃pb`ĂȂAwXyV˂܂57x uNR[hsv@\( ڍׂ̓wvQƂĂ )gpAwXyV˂܂57xN邾ŁApӂĂ{ꉻp̉R[hQȒPɎsł܂B
APItbNɗpvZXpDLLo
̃vZXɒꂽA[U[[hłAPItbNpDLLW[̌óA{Iɓ胂W[ɍs܂B ʓIɁAAPItbNɗpDLL̓t@CŒɂȂĂP[X߁AĂ̓W[̃t@CɁAgpł낤c[APItbNo\łB prƂāAQ[ȂuSpeed Hack Toolv̗ށAVFAEFAȂuRun As DatevnAɂ̓[U[[hœ삷e탂j^Oc[̌o܂B̏ꍇ́AGetModuleHandlegpāA̖߂lœDLLW[̗Lf܂BQl܂łɁADLLW[̗L̃`FbNɂ́ATool Help APIModule32NextAProcess status API(PSAPI)EnumProcessModulesEGetModuleFileNameExgp\łB
܂ACreateRemoteThreadȂǂpAOc[DLL([h)o邽߂ɁAntdll.dll̃GNX|[głLdrLoadDllgŃtbN@܂BɁAZLeB\tgLdrLoadDllւ̃tbNs邱Ƃ邽߁AKvɉLoadLibraryExOŃtbN܂BA̎@ł́AAPItbNΏۃvZXANɃGg[|Cgł~ĂADLLAPItbNsc[ɂ͑Ώł܂B
ߔNł́AAPItbNsc[AW[ꗗAPItbNo邱ƓɑΏ邽߁AAPItbNΏۃvZX̃vZXɂA[hꂽW[̃XgāAAPItbNɗpDLLW[B@L܂܂B̉B@ł́AΏۃvZXPEBPEB_LDR_DATA\̂ǂA\̂3LIST_ENTRYFlinkEBlinkCāAAPItbNpDLLW[N珜O܂BA͂܂ŃW[̃Xg̉ςłAvZX̃W[̂Bł͂܂B܂ẢB@gpĂAVirtualQuerygp64KBEɂ^CvMEM_IMAGẼy[WPEwb_擾A\[XZNṼAhXƃTCY擾Ă蕶ȂǂƂAvZX̐ɂAAPItbNpDLLW[oł]n͂܂B
ȂAAPItbNɂāADLLW[̒K{ƂȂł͂܂BsvZX̔Cӂ̃GAɃvOR[h݁AIATAPĨGg炻̃vOR[hɃWv邱ƂŁADLLpAPItbNƓl̏s킹邱Ƃ\łBAPItbN̎擾f[^AEgvbgꍇ́AAPIĂяö邢͌Ăяo̖߂lAwsprintfȂǂŕf[^ɕϊAOutputDebugStringŏo͂܂BAPǏĂяo͊Gg̃AhXCALL܂B̂悤APItbNɂẮAw݂݃nP[xupTCg[`쐬v@\(j[[fobO][pTCg[`쐬] )QƂĂB܂Ȁo͂ꂽfobÓAw݂݃nP[x̑SvZXpfobOj^[@\( j[[fobO][fobOo͂Ď] )gAΏۃvZXւ̃A^b`ȂɎ擾\łB
tAZuɍsAGg[|CgNOP߂Ƃ\tgEFÂłB
PȋUUPXł(ŊmF)BGg[|Cg1oCgOɂ炵NOP߂Jn̂́AwPEiDxpbJ[̎ނ肷ȃ\tgEFAɂAGg[|Cg_ƂoCip^[ɁAUPXkƔ肳̂邽߂łBUPXŎ̃\tgEFA̎st@CkAfobKŋNăGg[|CgWJ[`āA{̃Gg[|CgɎ܂ł̏l@邱Ƃ߂܂B ܂AIWiUPXk̎st@CPEwb_̓erĂ݂ĉB
fobKȂǂ̃vO͊֘Ac[삵Ă݂
fobK܂ރvO͊֘Ac[삵ĖŌĴ́AvO͂̐UɂƂǂ܂炸AȂ̃vO~O͂̃XLAbvƂʂ݂Ăf炵ƂłBAwOllyDbgx̂悤ȗDGȃfobKȏAd@\fobK̎́AwOllyDbgxɖ@\wOllyDbgxvOCvO͊֘Ac[Ȃǂ삷ÃvOCc[̃[U[ɂƂāA͂ɂ闘コAv[`̉\LƂ_ŗLvƍl܂B w݂݃nP[x̃fobKAXbh̃u[N|Cgݒ@\ȂǁwOllyDbgxɖ@\dĎĂ̂͏L̍lɂ̂łBwOllyDbgxvOC̍쐬ɂẮADꂽvOC҂łDokoDonwNbLOoCux ł̎@Ă܂̂ŁAQƂ邱Ƃ߂܂B
vO͊֘Ac[̎ɂẮAvbgtH[SDKlbǧɉAQl}AvO~OnTCg̎𗧂܂BvO͊֘Ac[̎ŎQlɂȂTCǵATCg̃Cy[WŃNĂ܂AȊOł͈ȉȂǂ܂B܂AVA⒆̃TCgɗLpȉ݂邱Ƃ܂̂ŁAGoogleȂǂŌΏۂ{Ep̃TCgɌ肵ȂƂ߂܂B
CodeGuru
http://www.codeguru.com/
The Code Project
http://www.codeproject.com/
Google \[XR[h
http://www.google.com/codesearch
ȂAvOCc[̐ɂẮA܂炪KvƂȂǖʂv\ɌŃvO~Oi߂ĉBŏɃRZvgmɂĂȂƁA@\ȂǂŖAvO~O邱ƂɂȂ肩˂܂B܂A\tgEFAʂɂ邱ƂłAw[U[ɖڂāxJƃT|[gsĉB[U[Ԃ̂A[U[̖ɗ̂Ƃu̍̊{vYƁA[U[ڂȂȂ܂B
vZX̃W[GAst@CƂă_v(t@Cɕۑ)ĂAɓ삵Ȃ͉̂̂łH
vZXɃ[hꂽst@CƁÃfBXNC[W̎st@C͍\قȂ邽߂łBTCg̃`[gAuItZbg|AhXϊ̌CD`FbNւ̉pvŏqׂĂ悤ɁAPEwb_̃ZNVɂ̓C[Wł̐ݒƃfBXNC[Wł̐ݒ藼܂܂ĂAPɃvZXォ_v̂ł́AZNVꗂ邽ߏCKvłB܂AUPXɂst@C̈k₻̑̊epbJ[ɂst@C̈ÍŎst@Cɑ삪Ăꍇ́AɂCȂȂȂӏ܂BȂAvOƂĂ͎IWi_vꂽ̂ʂ̂͗eՂłA_vst@CNƌx\\tgEFA݂܂BFUPXňkꂽst@CvZXォ_vꍇ́Aȉ̑Őɓ삷st@C܂B̂悤ȉ𓀂邢͕́Ao[XGWjÅԂł͂ǂuApbNvƌĂĂ܂B
1.Gg[|Cg{̂(OEPFIWiGg[|Cg)ɏC
2.ZNV(Raw Offset)̏C
3.IAT(C|[gAhXe[u)̍č\z
4.\[XfBNg̍č\(K{ł͂Ȃ)
5.uBase of Codev̏C(K{ł͂Ȃ)
ȂAl삵\tgEFA̎st@C̃ApbŃAvړIƂƎ㐫̉͂A}EFẢ͂сA{ꉻړI̓ȃP[XȊÓA쌠@sh~@ɒGƂĂ܂̂ŒӂĉB
͒S҂fobKʼn͑ΏۂNOɍsׂƂ́H
ȉ͕̃o[XGWjA̕X璸ӌ܂Ƃ߂̂łBŁuNOvƂȂĂ̂ŁA͑Ώۂ̎ۂ̓ȂƃAv[`złȂP[X͍lĂ܂B1.ECX`FbN
2.lbgł̌ʂAwv̓YtɖڂʂāA͂ɖ𗧂ȏ͂ȂmF
3.͑Ώۂw݂݃nP[xɓĂPEGfB^wUMPExŊJāAZNVAC|[gDLLAgpAPIAPEiD̏o͌ʁAGg[|CgPEt@C擾ɂARpC∳k̗L𐄑
4.PCQ[̏ꍇ̓\[XGfB^Ń\[XmFăfobO[h̗Lf
5.ȏƊ̃`[gAɂǂ̂悤ȃAv[`sz
6.z肵Av[`ɂāAAPI̕KvȒmsĂꍇ͂炩ߎŊmFĂ
fobKʼn͑ΏۂNɏꓖIȃAv[`ŝł͂ȂA炩߉͑Ώۂɂl@邱̓XLコŏdvłB܂Ã`[gAʼnĂ@RƂȂ̂ł͂ȂA͒ɃAv[`̃|CgƂȂ_ȂɍlƂɂAKvŏ̎萔ŌʓIȉ͂s߂̉̓ZXƂ\łB
wOllyDbgx̑@Ql͂܂H
vO͂̉ŁAOllyDbgɂẲ̂ƂĂ͈ȉ܂BOllyDbggȂŕKvƂȂAZuAPIъ{IȃAv[`@AvO͂̊{ĂALpȉƌ܂BEfobKɂx86vO͓
E͖@炿 }WJEI[v!
ENbJ[EvOS
ENbLOoCu
wOllyDbgx͑ΏۂȒPɋN@m肽B
j[uOptionsv (IvV) uAdd to Explorerv (GNXv[j[ɒlj) gpĂB܂AoCiGfB^\[XGfB^́Ae̓c[ȂǂɂĂAGNXv[ł̎st@CENbNŕ\|bvAbvj[ɓc[o^ALl̃WXgsƂ߂܂B̃WXǵAWebTCgc[ŔzzĂAwPeRdrxṕuGNXv[ւ̓o^pWXgt@C({)vQlɂȂ܂B
œɊoĂƖ𗧂|Cg͂܂H
wOllyDbgxł́A}EXŊeEBhE̐l͈͓IƁAENbNŃ|bvAbvj[ĂяoAIeɉFXȋ@\gƂł܂BɊȂ͐FXȉӏʼnENbNāAǂ̂悤ȋ@\邩mFĂƂ߂܂BĥłAWX^EBhE(EEBhE)ł͔ėpWX^łȂEFLAGSWX^[tO̊eXe[^XtOύX\łB܂AEBhEɂĂ̓hbO܂́uShiftvL[Ȃ͈͂I邱Ƃŕ͈͑I\ŁAWX^EBhE(EEBhE)ł̓hbOŕ\ëړsƂł܂B
QlȃV[gJbgL[(ɍEBhEpɎgp)
EnterFIĂR}h\Xgɒlj(IĂ̂JUMP߂CALL߂̏ꍇ͑ΏۃAhXYӏ\)
-/+F\Xg̑O/̃AhXYӏ\
F2Fu[N|Cgݒ/
F7Fڍ׃Xebvs(XebvCFTu[`ɓ)
F8FXebvs(XebvI[o[FTu[`͎sďz)
F9FfobM[s
F12FfobM[sꎞ~
Ctrl{F9F^[܂Ŏs
Alt{F9F[U[R[h܂Ŏs(VXeDLL甲ۓɎgp)
SpaceFAZu
Ctrl{EFoCif[^̕ҏW
Ctrl{GFAhXw肵Ĉړ(\ʒuύX)
ESCFڍXebvs̒~
wOllyDbgxvOC̓́H
ȉ̃y[WQƂĉBŏ́uOllyDumpvAuOllyScriptvȂǂ̊{IȃvOCĎgp@𗝉ǍKvɉďljĂƗǂł傤BCollaborative RCE Tool Library - Category:OllyDbg Extensions
OpenRCE Hosted Downloads: OllyDbg Plugins
APIĂяoւ̃u[N|Cgݒ̎dm肽B
̃R[hɃu[N|Cgݒ肷ꍇ́ACEBhE̍EBhEŋtAZuR[hXgړĨR[hIF2L[łAAPIւ̃u[N|Cg̏ꍇ͈ȉ̎@p܂B܂ACEBhE̍EBhEʼnENbNuSearch forv()uName (label) in current modulev(x(݂̃W[))ŁAfobM[gpꗗ\܂(uCtrlvL[{uNvL[ł)BŁAꗗ\EBhE̊eJNbN邢͉ENbNuSort byv()j[gƖړI̊TՂȂ܂B܂AW̐Wj[́uOptionsv(IvV)uDebugging optionsv(͏ڍאݒ)uAddressesv(AhX)^uŐݒł܂B
ɁAړI̊IENbNuSet breakpoint on every referencev(SĂ̎QƂɃu[N|CgZbg)ŁAړI̊ĂяoR[hɈꊇău[N|Cgݒs܂BA̕@ł̓C|[gZNVւ̃Wv(FuJMP DWORD PTR DS:[<USER32.DialogBoxParamA>]v)QƉӏɊ܂܂܂̂ŁAKvɉẴWv߂ւ̃u[N|CgĉB
XAPIĂяoӏɃu[N|Cgݒ()ꍇ́AړI̊IĉENbNuFind references to importv(C|[g̈ꗗ\)ŊĂяoӏ̃R[hꗗ\AeR[h}EX㉺J[\L[őIF2L[Ńu[N|Cgݒ()s܂B
tu[N|Cgݒ肵Ă݂B
WX^QƃAhX̒l̏ꍇ́ACEBhE̍EBhEŁAړĨR[hIĂuShiftvL[{F2L[Ńu[Nݒ肵܂B̃tH[}bg̓wvQƂĉBƂĂ͉LB
EAX==64
DWORD PTR [432100]<=(EAX+270F)
܂AuShiftvL[{F4L[ŃOtu[N|Cgݒł܂Bł̗̎ƂĂ͏L̍(WX^AhX̊i[l)łBɂA莞̎̒lOEBhEɋL^܂BOEBhÉuAltvL[{uLvL[ŌĂяo܂B
EBhEbZ[WɃu[N|Cgݒ肵Ă݂B
{IȃEBhEbZ[Wւ̃u[N|Cgݒ́AWj[́uViewv(\)uWindowsv(EBhE)ŃEBhẼXg\ĂAړĨEBhEIĉENbNuMessage breakpoint on WinProcv(bZ[Wu[N|CgZbg->WinProc)ŏڍאݒ_CAOĂяoău[N|Cgݒ肵܂BNTnOSł́AWj[́uOptionsv(IvV)uDebugging optionsv(͏ڍאݒ)uSecurityv(ZLeB)^úuAllow code injection to get address of WinProcv(WinProc̃AhX擾̈׃R[h̒)ŐmȃEBhEvV[WF邱Ƃ\łBA̎@͈SƊmɖ肪܂̂ŒӂĉB̃IvVgpꍇ́AfobM[F12L[Œ~Ԃł̂݃EBhEvV[WɃbZ[Wu[N|Cgݒ肵ĉB
L̎@ŏ肭bZ[Wu[N|CgݒłȂꍇ͎蓮ōs܂B̏ꍇ́AEBhEbZ[WFEBhEvV[ẂA擪R[hĂяoR[hɑtu[N|Cgݒ肵܂BvV[W̃AhXRegisterClass_CAÖŊmF\łB܂ÃAhX́AEBhEvV[WŏȂEBhEbZ[WVXeŏ邽߂́ADefWindowPročĂяoӏToƂ\łBDefWindowProc͒ʏEBhEvV[W̍Ōɋ߂ŌĂяo܂BȂA_CAOx[X̃AvP[Vł͒ʏvO̎sƂDefWindowProcĂяoƂ͂܂B
WM_LBUTTONDBLCLK̏ꍇ͉̏LB
MSG==0203
ړĨvV[WŃEBhEbZ[W̒li[AhXƃbZ[Ww肷邱Ƃł܂B
[EBP+C]==WM_LBUTTONDBLCLK
ȂAړĨEBhEɑEBhEbZ[W̊Ďsꍇ́AbZ[W[vTranslateMessageĂяoӏɃOtu[N|Cg(FMSG)ݒ肵ău[NʂOEBhEɕ\邱ƂŁAbZ[Wj^[̗lɏ邱Ƃ\łBA_CAOx[X̃\tgEFÁAR[hɃbZ[W[vK{ł͂܂B
QlCł̃bZ[W[vBEBhEbZ[W₱APIMSG\̂ɂāAvbgtH[SDK̎ɖڂʂƂ߂܂B܂ATCgŌJĂwSҌKpvOx̃\[XR[hQlɂȂƎv܂B
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
APIĂяoӏł͂ȂCӂ̕R[hɈꊇău[N|Cgݒ肵B
\߂̗lȃu[N|Cgݒ肵R[hɃ[U[`xݒ肵ĂĉBꂩ烁CEBhE̍EBhEʼnENbNuSearch forv()uUser-defined labelv([U`x)ŃxꗗEBhE\ÃEBhEʼnENbNuSet breakpoint on every commandv(SẴR}hɃu[N|CgZbg)łBɂꊇu[N|Cgݒ肪\ɂȂ܂BA^CAZuŒӂׂƂ́H
PCQ[ł̃pTCg[`ߍݓAA^CAZuɂR[hIɕύX/ljꍇ́AėpWX^̒lύX/ljӏ̑OŕێȂƕsP[X܂(ESIyEDIWX^)B̏ꍇPUSHAD߂POPAD߂ύX/ljӏ̐擪ƏI[ɗpŏ̃R[hőΏ\łB܂AEFLAGSWX^̓eێꍇPUSHFD߂POPFD߂p܂B܂AWindows XP Service Pack 2Ŏf[^sh~@\ɂAR[hs郁GÁAKANZXƂĎsKvɂȂ܂(Q)B
A^CAZuAPIĂяoR[fBOꍇ́Aucall kernel32.ExitProcessvƂ悤Ɋ͂܂B͑啶/mɓ͂ĉB
R[h̓IύXɁwOllyDbgxtAZuR[h\ꍇ́AuCtrlvL[{uAvL[ŃR[hĉ͂ƑΏł܂B
e̓eϓӏׂɂ́H
܂Wj[uViewv(\)uMemoryv()Ń[}bv\܂BɓeϓׂGAIEENbNuDumpv(Dump)œGÃe_vAENbNŕ\|bvAbvj[uBackupv(BKUP)uCreate backupv(BKUP 쐬)I܂Bɂ肻̃GÃeɕϓA̕ϓӏnCCg\ɂȂ܂Bϓӏ͓̌lɃ|bvAbvj[uSearch forv()uModified datav(Cσf[^)Ō\łB
ȂA̋@\ł͒l̕ϓeڍׂʂłA܂Ai荞@\Ă܂B̂߁APCQ[͎̃vZX̕ϓɂ́Aw݂݃nP[xwXyV˂܂܂TVxgp邱Ƃ߂܂B
vOQƂĂ镶̈ꗗ\@\gB
CEBhE̍EBhEʼnENbNA|bvAbvj[uSearch forv()uAll referenced text stringsv(SĂ̎Qƕ)IĉBOɎQƕ̌{ꕶΉ\ɂĉ(TCgzz̓{ꉻpb`YtQƊ肢܂)B蕶̎QƃR[hꗗ\@\gB
ftHgŃf[^ZNV̓e\郁CEBhE̍EBhEŁAړI̕To(|bvAbvj[猟\)A̐̕擪AhXɓoCif[^IEENbN܂Bɂ\ꂽ|bvAbvj[uFind referencesv(QƂ)(uCtrlvL[{uRvL[ł)IĉB̃R[hɃ^b`Ŗ߂@m肽B
ړĨR[hENbNuNew origin herev(ړɃZbg)ݒ肵ĂƁAړɉENbNuGo tov(ړ)uOriginv(ړ)Ō̃R[hփ^b`Ŗ߂Ă邱Ƃł܂BȂAłړ̓R[hsĂł͂ȂA܂ŋtAZuR[hXgł̕\ӏύXĂ邾łB܂AړĨR[huEntervL[ŕ\Xgɓo^Ăāu+vu-vL[ňړ@ABookmarkvOC𗘗pƂI܂BR[߂Tu[`yсAWv߂WvɃ^b`ňړ@͂܂H
R[܂̓Wv߂̃R[hIāAuEntervL[łBF7L[ŃTu[`ɃXebvCɁAȒPɃTu[`@͂܂H
uCtrlvL[{F9L[Ń^[܂Ŏs邩A\CALL߂ɂvV[WĂяo̎̃R[hɃu[N|Cgݒ肵Ă܂BVXeDLLAfobM[st@CȊÕR[h\ꍇ̑Ώ@́H
L̎@ŕ\ʒuύX邢́AuAltvL[{F9L[Ń[U[R[h(fobM[̃R[h)܂Ŏs܂B[U[R[h܂Ŏsꍇ́AfobM[ɐ߂ĉ炩̏s킹邱ƂKvȃP[X܂B܂AEBhEʼnENbNuViewv(\)ŔCӂ̃W[Ƀ^b`ŕ\ύX邱Ƃ\łB ɂ́ACj[́uViewv(\)uExecutable modulesv(sW[)ŎsW[ꗗ\AfobM[̃W[IEENbNŕ\|bvAbvj[uView code in CPUv(CPUR[h\)łΏł܂BtAZuR[hEBhE(EBhE)ŃR[hύX̎st@C̕ۑ肭܂B
ENbNŁuCopy to executable v(st@CփRs[)R[hύXӏ̂st@CɔfӏSĂꕔ肵āAXɃ_vEBhEʼnENbNāuSave filev(t@Cۑ)ŕۑ܂BȂA̕ۑt@C͕KIWiƂ͕ʖ̂̂ɂāAIWi̎st@Cɂ͈ؕύXȂʼnBuJust-in-time debuggingv(WXgECE^C fobO)Ƃ͉łH
ȒPɌAAvP[V炩̖ɂNbVꍇɁAfobKł̃AvP[VɃA^b`Ėӏ̔E𑣂@\łBႦwVCx(}CN\tgЂVisual C++)RpCCXg[ƁÃRpC̕tfobKuJust-in-time debuggingvpfobKƂăWXgɓo^邱Ƃ܂BvO~O͂AvO~OȂwOllyDbgxuJust-in-time debuggingvpfobKƂēo^ĂƂ߂܂BAvP[V̕s҂ɒm点ۂɖ𗧂Ƃ܂B
wOllyDbgxł̃\[XxfobO肭܂
\[XxfobOmFFVisual C++ 6.0
Visual C++ 2008
OllyDbgŃ\[XxfobOsꍇ́AOɃRpCŃN̐ݒύXāAufobO̐vpdb`̃fobOt@Co͂悤ɂĂRpCĂ܂BŃfobM[NAuViewv(\)uSource filesv(\[Xt@C)ŕ\\[Xt@CXgŖړĨ\[Xt@CIE_uNbNƁÃ\[Xt@C̃\[XR[hʃEBhEŕ\܂B\ꂽ\[XR[h̍sԍ̍Ɂu>vsł́AsIENbNŕ\|bvAbvj[eu[N|Cgݒ\łBɁA|bvAbvj[uView in Disassemblerv(tAZuʕ\)ŁA\[XR[h̑IsɑΉtAZuR[hCPUEBhE̍EBhE̋tAZuR[hXgőIEnCCg\ɂ܂BtɁAtAZuR[hXgŃu[N|Cgݒ肷ƁA\ꂽ\[XR[h̊Yʒu̍sԍnCCg\ɂȂ܂B\[XxfobÓAu[N|Cgł̃u[ÑOɃ\[XR[h̏(ƊJnAhX̃ItZbg)ĕ\܂B
ȂÃ\[XxfobÓARpCVCpꍇł́AOllyDbgPDBt@C̃fobOɃfobOV{𗘗p邽߂ɁARpCfobOrhƂčsKv܂B
OllyDbg̓\[XxfobOfobOwvnAPIɂĎĂ܂AAPI̓o[Wق܂ޑSẴRpCfobOV{ɑΉĂł͂Ȃ߁A\[XxfobOłȂP[X܂B̏ꍇOllyDbgDBGHELP.DLLAgpĂRpCo͂fobOV{ɑΉo[Ŵ̂肵Ēu邱ƂőΏ\ƍl܂(DBGHELP.DLL͍Ĕzz\R|[lg)BP[XɂĂMicrosoftzzĂwDebugging Tools for Windowsx瓯DLL𒊏oKv܂BȂADBGHELP.DLLMicrosoftȊÕRpCŏo͂ꂽfobOV{ɂΉĂƂ͌܂̂ŒӂĉB
܂A[U[[hœ삷AvP[ṼfobOɂẮAVXefobOV{͕svłAOllyDbgŃVXefobOV{𗘗pꍇ́Aȉ̑săV{T[o[g悤ɂĂĉBAȉ̑쌋ʂɔOllyDbg͕̓ۏؒv˂܂B
1. wDebugging Tools for WindowsxCXg[Awdbghelp.dllxAwsymsrv.dllxсwsrcsrv.dllxOllyDbg̃tH_ɃRs[܂B
2. st@CuOLLYDBG.EXEvɈȉ̏s܂B̃pb`R[hɂ鏑́AwXyV˂܂57xŃj[́ut@CvuȈՃoCit@CvŊȒPɍsƂ\łB
*OllyDbg1.10p FILENAME OLLYDBG.EXE 00090709: 10 37 0009070A: 12 02 0009070B: 00 03 0009070C: 00 80 000907EC: 74 EB3. ϐu_NT_SYMBOL_PATHvŃVXefobOV{̃tH_ݒ肳Ă邩mF܂B
()_NT_SYMBOL_PATH=symsrv*symsrv.dll*c:\symbols*http://msdl.microsoft.com /download/symbols
wOllyDbgxȂǂgPCQ[͂̃`[gA͂܂H
\ȂAQ[wExGAMExVol6BlueAshڍׂȃ`[gAeĂ܂̂łBAPIւ̃u[N|CgAXebvsASZNV̕⒍ӎA{Iȑ@łȂAAv[`ɑlڂĂAKƎv܂BȂ݂ɁÃ`[gA{lɌJꂽŏ́wOllyDbgxp̓`[gAłB܂ATCgwfobKɂx86vO͓xсATCgNuc`m`̕vuLIndexvɂ`[gA܂̂ŁAɂȂ邱Ƃ߂܂B
ߔNł́A͂ƂẲ̓`[gAł͂ȂAɂ̓`[gA삵YouTubeȂǂɃAbv[hP[XĂ܂BɃW[ȃQ[ȂAKvɉĉ͊֘A悪ȂĂ݂邱Ƃ߂܂B
`[gAɓgAAv[`ɂ鑀菇Ȃǂ蕪₷邱Ƃ\łAɒSҌ̉ɗLpłB`[gA삵đ̕ɉA̋LsƍlẮAƂIɓĂƗǂł傤B
Ql`[gAF
PCQ[u1u`[gT낤Iv
wOllyDbgxł̃L^EČɂ́H
w݂݃nP[xwXyV˂܂܂TVx̃fobKɕtAPIg[X@\gpĉB̋@\ŁwOllyDbgxWriteProcessMemoryĂяog[X邱ƂɂAwOllyDbgxsSẴvZXAw݂݃nP[xwXyV˂܂܂TVxp̉R[hƂďo͂邱Ƃł܂BȂAAPIg[X@\́AwOllyDbgxȊOWriteProcessMemoryp\tgEFAɂgp\łBCÕQ[僊o[XGWjÁwOllyDbgxɑ]͂ǂł傤H
vO̓c[ƂĂx̕]͓Ă܂BACOŐlCFPSQ[́AwOllyDbgxΉłȂDirectXr[hœ삷̂߁AA_gQ[⓯lQ[Ȃǂ́AwOllyDbgxʼn͉\ȃQ[ł{قǂ͕]ĂȂ悤Ɍ܂BȂA݂łDirectX̃tbNɂ苭EBhE[h\tgEFAJĂ邽߁AwOllyDbgx̓C̉͗pfobKƂď\gp\łB܂A DirectXr[h̃Q[łAGg[|CgEBhE쐬̊ԂŃR[h̎s~ԂȂAwOllyDbgxP̂łe͂\łB
c[}EFAɗpꂽ߂ɖ܂H
݂̓{̖@xł́AȖړIō쐬fobK̎c[A}EFA邢́A}EFA̕⏕c[ƂĔzzĂA߂ɖ邱Ƃ͂܂BQlFRs[^EECXɊւ߂ɂ(@Ȃ̌)
ۂɃ}EFAɗpꂽP[XƂẮASysinternalswPsToolsx܂B̗A}EFAɗp邱ƂĂA{lɌc[̌J~ɂ͎Ă炸A܂ÂƂ炩̖Ă悤ɂ͌܂BAc[̎dlɂ܂Aӂėp邱ƂɖhƂ͖̂܂B
@IɊ֘AāA{ł̌ÁuėpvvÓEc[A\AsANZXA쌠NQAЗ͋ƖWQAsh~@ɒGƂɗpĂAs@sׂւ̎gp֎~Ɛӏ܂ގgp_c[̍҂AӔC邱Ƃ͂قƂǖƂ܂BAЉIe̒xɂẮAӔC\܂B
A̗L\tgEFAEQ[upṽvOc[zz邱Ƃ́Ai׃RXg݂Ċ댯͒Ⴂ̂́Aɖ@IXNɎNĂƂ܂BɁAߔNiłsh~@ɒG悤ȃc[̔zźATق悢Ǝv܂B
ȂA̍ۂɂ́A邢͈ȍIٌlł͂ȂAIٌlقƂ߂܂BIٌl̒ɂ́AٌmƂĂ̖ڂӔCʂȂ҂܂B̌o猾AŕٌmɕɂނƁAꐶ悤ȍٔe┻ɂȂ肩˂܂B