Read-only archive. Login and posting are unavailable.

PDA

View Full Version : Hỏi về assembly, lập trình dll trên nền window


foggyflute
12-06-2010, 15:12
Hiện tại em có 1 application sau khi run file .exe thì core.dll dump lên cpu tại ô nhớ 007711F6 có giá trị là 6A 17 giờ em muốn đổi nó thành 6A 18 thì nên viết 1 cái hook như nào ạ? hiện tại em cũng đang có 1 cái hook mẫu viết bằng .asm nhưng phức tạp hơn nhiều nên không có giá trị tham khảo với em lắm mà lừa thì cháy đến đít rồi nên em cũng không còn nhiều thời gian để research.

Bro nào biết về asm hoặc lập trình mấy cái dll có thể bỏ ít thời gian để giúp em được không ạ, em xin hậu tạ hết mình.

foggyflute
12-06-2010, 15:27
up





he message you have entered is too short. Please lengthen your message to at least 10 characters

foggyflute
12-06-2010, 17:33
up





he message you have entered is too short. Please lengthen your message to at least 10 characters

Daviath.
12-06-2010, 17:58
Up dùm thôi... :">

Thích Ăn Chuối
12-06-2010, 18:15
mov ax,6a18
mov @007711F6,ax
:)

2love1989
12-06-2010, 18:16
bạn viết app đấy về mảng gì? Ứng dụng cụ thể vào việc gì :-s

quangredlight
12-06-2010, 18:17
Nếu làm ứng dụng hook thì bạn thử tham khảo bài viết của Iczelion xem sao,
trong Link là các lí thuyết về hook đơn giản , sử dụng SetWindowsHookEx. Ứng dụng demo đùng để hook chuột thông qua thư viện mousehook.dll
Bạn nên tham khảo cách viết dll này

http://win32assembly.online.fr/tut24.html

Về câu hỏi của bạn, phải có code hoặc cái dll và ứng dụng cụ thể để debug thì mới rõ là sai ở đâu và sửa thế nào , bạn mô tả như thế thì cũng chịu.

quangredlight
12-06-2010, 18:19
mov ax,6a18
mov @007711F6,ax
:)

Địa chỉ cao tít thế kia em nghĩ là thuộc cái DLL thôi,
Tại địa chỉ này mà không có access protection là PAGE_READWRITE thì lệnh của bác gây exception ngay

foggyflute
12-06-2010, 21:43
:x thx các bác đã vào chỉ giáo

đây là folder chứa cả exe và dll
http://revlineage2.com/revl2.v2.18.12.2009.rar

- đầu tiên em chạy l2.exe (sẽ hiện ra error vì thiếu file support về modeling nhưng ko ảnh hưởng đến việc debug lắm)
- sử dụng process Explorer để supend vì thằng này nó có cơ chế anti debug (link http://download.sysinternals.com/Files/ProcessExplorer.zip)
- sử dụng ollydbg để attach và resume ở bên process Explorer

nhấn Alt + M, trong cột owner tìm những cái thuộc engine, sẽ thấy từ 6-7 cái, chọn cái thứ 2 (có cột "Contains" là rỗng) right click -> dump in CPU.

sau đó nhấn Alt + E chọn engine.dll

trong cửa sổ chính (CPU) nhấn Ctrl + G move về line 00770000 sau đó Ctrl+F để tìm "PUSH 17" (nằm ở vị trí khoảng 00770D0F).

tại đây em đã thử edit (right click -> edit -> binary edit) và trace ngược lại file gốc (right click -> edit -> copy to executable) nhưng có vẻ file gốc đã bị packed nên không có 1 địa chỉ tương ứng. :-s

giờ em muốn chuyển cái PUSH 17 này thành PUSH 18 thì nên làm như thế nào ạ?

sẵn tiện đây em post 1 cái hook để change connect port xem các bác có thấy gì khả thi hoặc get idea từ trong đấy không



format PE GUI 4.0 DLL

include 'C:\FASM\INCLUDE\win32axp.inc'

section '.data' data readable writeable

settings db 'settings', 0
authport db 'authport', 0
engine db 'engine.dll', 0
loaded db 'authport, by Fyyre - loaded', 0
port dd 0
iniValue dd 0
tmp1 dd ?
tmp3 dd ?
port_number dd ?
cmpb1 db 0
cmpb2 db 0
cmpb3 db 0
cmpb4 db 0
cmpb5 db 0

section '.text' code readable executable

DllEntryPoint:
entry $
push ebp
mov ebp, esp
push ecx
cmp dword [ebp+0Ch], 1
jnz @F
call ModifyAuthLogin
call ThreadLibraryCalls
@@:
mov eax, 1
mov esp, ebp
pop ebp
ret

ModifyAuthLogin:
pushad
mov ebp, esp
push ecx
mov esi, 100h
push 4h
push 1000h
push esi
push 0
push -1
call
mov , eax
push authport
call
lea ebx,
push 100h
push ebx
push eax
call
add edi, 100h
add ebx, 100h
@@:
dec ebx
cmp byte , '.'
jnz @B
mov dword , '.ini'
lea ebx,
@@:
push ebx
push 4
lea eax,
push eax
push 0
push authport
push settings
call
mov eax, [esp-0Ch]
mov eax,
mov , eax
;ascii to hex routine... =)
xor eax, eax
xor bx, bx
xor ax, ax
lea esi,
mov bl, byte
mov ecx, 4
@makehex:
cmp bl, 0
jle hexdone
sub bl, 30h
cmp bl, 09h
jle @next
sub bl, 07h
cmp bl, 0fh
jle @next
sub bl, 20h
@next:
imul ax, 0010h
add ax, bx
inc esi
mov bl, byte
dec ecx
cmp ecx, 0
jne @makehex
hexdone:
mov , eax
push 8000h
push 0
push
push -1
call
push engine
call
xchg eax, esi
mov al, 68h
mov , al
;if you are thinking "wth using cmpsb and not cmpsd?! wuwu, the performance hit!"
;then try replacing this with cmpsd, if you can get it working on all chronicle clients,
;let me know.
@search:
cld
mov ecx, 1
lea edi, byte
cmpsb
jne @search
cld
mov ecx, 1
mov al, 3Ah
mov , al
lea edi, byte
cmpsb
jne @search
cld
mov ecx, 1
mov al, 08h
mov , al
lea edi, byte
cmpsb
jne @search
cld
mov ecx, 1
mov al, 0
mov , al
lea edi, byte
cmpsb
jne @search
sub esi, 4
cmp byte , 068h
jne @search
mov dword , 0
mov , esi
lea edx, dword [ebp-04h]
push edx
push 4h
push 5h
mov ebx,
push ebx
push -1
call
inc ebx
mov eax,
mov , eax
lea edx, dword [ebp-04h]
push edx
push 2h
push 5h
mov ebx,
push ebx
push -1
call
add esp, 4
popad
ret

ThreadLibraryCalls:
pushad
push authport
call
push eax
call
push loaded
call
popad
ret

section '.idata' import data readable writeable

library kernel32, 'kernel32.dll'

import kernel32, \
GetModuleHandleA, 'GetModuleHandleA', \
GetModuleFileNameA, 'GetModuleFileNameA', \
GetPrivateProfileStringA, 'GetPrivateProfileStringA', \
VirtualProtectEx, 'VirtualProtectEx', \
VirtualAllocEx, 'VirtualAllocEx', \
VirtualFreeEx, 'VirtualFreeEx', \
DisableThreadLibraryCalls, 'DisableThreadLibraryCalls', \
OutputDebugStringA, 'OutputDebugStringA'


section '.edata' export data readable writeable

export 'authport', \
DllEntryPoint, 'DllEntryPoint'

section '.reloc' fixups data discardable

section '.rsrc' data readable resource from 'authport.res'

foggyflute
13-06-2010, 00:00
up





he message you have entered is too short. Please lengthen your message to at least 10 characters

tranthanhtuanvn
13-06-2010, 01:39
up hộ cái ...................................................

regor 255
13-06-2010, 07:18
Hiện tại em có 1 application sau khi run file .exe thì core.dll dump lên cpu tại ô nhớ 007711F6 có giá trị là 6A 17 giờ em muốn đổi nó thành 6A 18 thì nên viết 1 cái hook như nào ạ? hiện tại em cũng đang có 1 cái hook mẫu viết bằng .asm nhưng phức tạp hơn nhiều nên không có giá trị tham khảo với em lắm mà lừa thì cháy đến đít rồi nên em cũng không còn nhiều thời gian để research.

Bro nào biết về asm hoặc lập trình mấy cái dll có thể bỏ ít thời gian để giúp em được không ạ, em xin hậu tạ hết mình.

Up cho anh bạn nào, đây là lúc cần nhau giúp đỡ này. Mình thì chẳng biết mô tê gì cả nên không giúp Mylove được. Up cho lên thôi.

Vimvq1987
13-06-2010, 07:27
stackoverflow.com

regor 255
13-06-2010, 08:46
Lên nào!!!!!!!!

foggyflute
13-06-2010, 11:16
stackoverflow.com

=,= được thì đã không phải mò lên đây hỏi

Chocopie001
13-06-2010, 11:54
up hộ .
mù tịt nên ko giúp dc

katurat0
13-06-2010, 11:59
asm quá khó so với em :shot: up phụ thôi

Vimvq1987
13-06-2010, 16:45
=,= được thì đã không phải mò lên đây hỏi

=)) hỏi trên đấy ko đc thì còn hỏi ở đây làm gì???

Im Legend
13-06-2010, 17:05
=)) hỏi trên đấy ko đc thì còn hỏi ở đây làm gì???
ở đây tạp nham biết đâu cao nhân lx lại biết. :">:boss::-s:-s:-s

regor 255
13-06-2010, 17:53
Lên buổi chiều nào!

Vaanres
13-06-2010, 18:09
mấy cái hợp ngữ này làm mình điên đầu một thời , cũng may là cũng chỉ dạy ở mức cho biết thôi :sad: ...

quangredlight
13-06-2010, 18:24
Máy ảo của em ko hỗ trợ rồi , chẳng giúp được
2010.6.13 18:22:31
OS : Windows XP 5.1 (Build: 2600)
CPU : GenuineIntel Intel(R) Pentium(R) 4 CPU 2.40GHz @ 2399 MHz 191MB RAM
Video : No Video
PosCode : LS1(83) 0:0:0 1/0 [474]

Please enable Direct3D acceleration. You can do this by starting dxdiag and enabling Direct3D Acceleration in the Display1/2 tab after installing DirectX 8.1b (or later) and the latest drivers for your graphics card.