- -"
อีกหนึ่งคำุถามเพื่อเป็นการ confirm ความโง่ของตัวเอง เหอๆๆ (ก่อนหน้านี้มีอีก 1 คำถามนะครับ ยังไงช่วยดูหน่อย)
[code]
invoke GetFileSize,eax,0;Get file's size
mov dwSize,eax;eax
Printable View
- -"
อีกหนึ่งคำุถามเพื่อเป็นการ confirm ความโง่ของตัวเอง เหอๆๆ (ก่อนหน้านี้มีอีก 1 คำถามนะครับ ยังไงช่วยดูหน่อย)
[code]
invoke GetFileSize,eax,0;Get file's size
mov dwSize,eax;eax
Quote:
ตรง VirtualAlloc,0 << มันไม่ไ่ด้กำหนด Address ที่จะทำ VirtualAlloc เ้อาไว้อ่ะครับ (มันกำหนดเป็น0) แล้วทีนี้ จะทำไปกำหนด access policy ของ File ที่เราเรียกด้วย CreateFile ได้หรอครับ??
Clear แล้วครับ - -"(ถามเองตอบเอง) สรุปว่า VirtualAlloc มีเอาไว้สำหรับกำหนด Allocation ของ File ที่เราจะ Read ขึ้นมา
ถ้าเป็นอย่างนั้นตามที่ผมเข้าใจก็คือ เราต้องทำการเรียกใช้ พวก VirtualAlloc หรือ GlobalAlloc ก่อนที่ทำเรียกใช้ ReadFile หรือ WriteFile ถูกไหมครับ?[/b]
โค้ดทั้งหมดนี้ เดิมๆ เขียนด้วย delphi โดย aphex และ ทำการ แปลง โดย shapeless กลายเป็น Masm function เดิมๆ ของมัน คือ Getmem http://www.delphibasics.co.uk/RTL.asp?Name=GetMem อยู่ใน System.pas
ไม่ใช้ function ที่ออกโดย microsoft เลยใช้ VirtualAlloc ทดแทน ความจริงใช้มาแต่แรกก็ได้ :D
ตอบไม่ตรง คำถามซ้ะงั้น :lol:
* api หาอ่านได้ทั่วๆ ไปเลยครับ บานเลย เยอะแยะมากมาย :D
Quote:
* api หาอ่านได้ทั่วๆ ไปเลยครับ บานเลย เยอะแยะมากมาย :D
[/b]
- -"
ปัญหาของผมคือการใช้งานอ่ะครับ (อ่านพอมั่วได้) แต่พอเอาไปใช้จริงๆ กลับไม่รู้ว่าต้องใช้ยังไง อย่างเช่น เจ้า
Virtualloc << เชื่อมะ เพิ่งรู้เมื่อวานเลยว่าใช้งานยังไง T-T
สงสัยทำได้อย่างเดียวคือต้องฝึกเขียนบ่อยๆ กับ อ่าน code ที่ท่าน neoclassic เอามาปล่อย ... ^^"
เอาหละ อ่านจบซักที มีปัญหา มาถามอีกแล้วครับ
Code:mov eax,contxt.regEbx
add eax,8
lea ecx,[edi].OptionalHeader.ImageBase
invoke WriteProcessMemory,ProcInfo.hProcess,eax,ecx,4,addr BytesRead
push [edi].OptionalHeader.ImageBase
pop eax
add eax,[edi].OptionalHeader.AddressOfEntryPoint
mov contxt.regEax,eax
invoke SetThreadContext,ProcInfo.hThread,addr contxt
ผมไม่เข้่าใจว่าทำไมต้องเอาค่าเก็บอยู่ใน EBX มา + 8 แล้ว write ค่า ImageBase กลับลงไปที่ ตำแหน่งนั้น?Code:mov eax,contxt.regEbx
add eax,8
แล้วทำไมถึง move ค่า EP ของ program ไปไว้ใน EAX ?Code:add eax,[edi].OptionalHeader.AddressOfEntryPoint
mov contxt.regEax,eax
- -" พยายามหาอ่านใน net แต่หาคำตอบไม่ได้ซักที
มา เขยิบให้นะท่าน Tummy โอเคครับ..
Quote:
<div class='quotetop'>QUOTE
ผมไม่เข้่าใจว่าทำไมต้องเอาค่าเก็บอยู่ใน EBX มา + 8 แล้ว write ค่า ImageBase กลับลงไปที่ ตำแหน่งนั้น?[/b][/quote]Quote:
mov eax,contxt.regEbx
add eax,8[/b]
ทุกครั้งที่ run ค่า contxt.regEbx จะไม่ซ้ำกันเลยและ + ไปอีก 8 ยัง งง อยู่เลย ทั้งๆ ที่ regEax..regEdi มีค่าหมดเลย แต่ทำไม่เลือก regEbx แถมยังต้อง + 8 ถ้าไม่เป็นตามนี้ไม่เวิร์ค ยังคิดไม่ออก ไม่รู้เหมือนกันว่า aphex หาค่านี้มาได้ไง :P
Quote:
<div class='quotetop'>QUOTE
แล้วทำไมถึง move ค่า EP ของ program ไปไว้ใน EAX ?[/b][/quote]Quote:
add eax,[edi].OptionalHeader.AddressOfEntryPoint
mov contxt.regEax,eax[/b]
มุมมองง่ายๆ
contxt.regEax = ImageBase + AddressOfEntryPoint
เก็บค่าไว้ใน contxt เพื่อจะ ResumeThread เป็นขั้นตอนสุดท้าย ไม่เช่น นั้น bytes ใหม่ๆ ที่เขียนลง memory จะไม่มีผล
ผมหาคำตอบของ EBX +8 มาได้ละ ^^"
**Hidden Content: To see this hidden content your post count must be 1 or greater.**
แต่ผมยังหาคำตอบของ context.regEax ที่เก็บค่า EP เอาไว้ไม่ได้ว่า เพราะอะไร
จากการมั่วของผมก็คือ context.regEax จะเก็บค่า ตำแหน่งของการ return to thread เอาไว้ถูกไหมครับ? << อันนี้ผมเดาเอาอ่ะ