|
[求助]在一个exe内部怎么得到他加载的dll的函数地址?
用exescope先打开DLL可以取得DLL的函数地址,不过用CreateRemoteThread直接调用好象不行,在目标进程中写入 pushad pushfd mov ebx,用exescope查到的地址 call ebx popfd popad ret 再CreateRemoteThread执行时,可以成功,不过,好象DLL不能被重定位才行。要动态取得目标进程中DLL的函数地址,还没有成功过。 |
|
[求助]关于PPPOE拨号网络共享的问题
应该不用写程序了,用代理服务器就可以了吧. |
|
[求助]为什么inlink hook NtQueryDirectoryFile从第6字节跳老是出错呢
[QUOTE=Prochg;874460]8056ef2e 8bff mov edi,edi 8056ef30 55 push ebp 8056ef31 8bec mov ebp,esp 8056ef33 e9d2754b78 jmp hidefile!MyNtQueryDirectoryFile (f8a2650a) 在MyNtQueryDirectory里面 也有 push ebp mov ebp,esp 然后你没恢复ebp就jmp到下面吧 hidefile!OriginalNtQueryDirectoryFile [c:\hidefile\src2\hidefile.c @ 381]: f8a264da 8d452c lea eax,[ebp+2Ch]f8a264dd 50 push eax f8a264de 8d4528 lea eax,[ebp+28h] ebp的值不是原来的了 [/QUOTE] ebp的值我也考虑恢复过了,我在jmp之前用push ebp,然后跳过去以后用pop ebp也不行。 |
|
[求助]为什么inlink hook NtQueryDirectoryFile从第6字节跳老是出错呢
pushad/pushf/jmp/popf/popad 这种方法我用过,还是不行。直接蓝掉。我甚至在 8056ef33 e9d2754b78 jmp hidefile!MyNtQueryDirectoryFile (f8a2650a) 之前加入push eax或pushad,但是还是蓝屏。即: BYTE JmpAddress[7]={0x50,0xE9,0,0,0,0x90,0x58}; //0x50为push eax 或: BYTE JmpAddress[7]={0x60,0xE9,0,0,0,0x90,0x58}; //0x50为pushaf 令我想不通的是,如果从函数入口就加入jmp一点问题都没有,一从中间,不管怎么平衡堆栈都不行。 |
|
[求助]为什么inlink hook NtQueryDirectoryFile从第6字节跳老是出错呢
kd> u NtQueryDirectoryFile nt!NtQueryDirectoryFile: 8056ef2e 8bff mov edi,edi 8056ef30 55 push ebp 8056ef31 8bec mov ebp,esp 8056ef33 e9d2754b78 jmp hidefile!MyNtQueryDirectoryFile (f8a2650a) 8056ef38 90 nop 8056ef39 58 pop eax 8056ef3a 50 push eax 8056ef3b 8d4524 lea eax,[ebp+24h] kd> u OriginalNtQueryDirectoryFile hidefile!OriginalNtQueryDirectoryFile [c:\hidefile\src2\hidefile.c @ 381]: f8a264da 8d452c lea eax,[ebp+2Ch] f8a264dd 50 push eax f8a264de 8d4528 lea eax,[ebp+28h] f8a264e1 50 push eax f8a264e2 a19869a2f8 mov eax,dword ptr [hidefile!_imp__NtQueryDirectoryFile (f8a26998)] f8a264e7 83c00b add eax,0Bh f8a264ea ffe0 jmp eax f8a264ec ce into 而且jmp eax以后,也能正确回到8056ef39 58 pop eax,一切都感觉没问题,可是就是蓝屏。 |
|
[求助]为什么inlink hook NtQueryDirectoryFile从第6字节跳老是出错呢
我调试的时候能够正常的跳回去的。只是再往下执行到一个函数的时候返回c0000005然后就蓝掉了,那个函数好象是叫nt!NtUnlockFile。估计是堆栈的问题,但是怎么看都找不出问题。 |
|
|
|
[求助]CreateRemoteThread( )中的线程是不是不能使用VCL?
ShowMessage("ok"); 好象是MFC的函数,如果目标进程没有加载了此函数的DLL,就无法调用此函数,而,MessageBoxA是基本API,在user32.dll中,一般的程序都会加载它。 |
|
[原创]从MsgBox开始学习汇编
MsgBox proc push esp push MB_OK push ebx push ecx push NULL call MessageBox pop ecx pop ebx pop esp ret _MsgBox endp 这段程序我认为是有问题的。 因为在messagebox内部已经做了四个参数的出栈,在调用函数之前,堆栈是: NULL ecx ebx MB_OK esp call完以后,堆栈应该只剩esp,其它几个参数都被call出栈了, 这个时候再pop ecx,pop ebx,pop esp好象就有问题了吧。 |
|
[求助]PB源玛转C++编译或其他语言编译
我用VB的写了一个,你看下。在语法上PB和VB非常相似。 Private Sub Command1_Click() Text2.Text = aaa(Text1.Text) End Sub Public Function aaa(b As String) As String Dim li As Long Dim li_pass As Long Dim li_len As Long Dim li1 As Long Dim listart As Long '= 1 Dim lipos As Long '= 1 Dim lc As String Dim ls1 As String Dim lsrtn As String Dim str As String str = "AAAAAAAA" ls_pass = b listart = 1 lipos = 1 li_pass = Asc("8") lsrtn = "" ls_pass = Trim(ls_pass) li_len = Len(ls_pass) If li_len < 8 Then ls_pass = Left(str, 8 - li_len) + ls_pass 'ls_pass = Space("A", 8 - li_len) + ls_pass End If ls_pass = Right(ls_pass, 8) li = 1 li_len = 8 Do While li <= 4 lc = Mid(ls_pass, li_len, 1) li1 = Asc(lc) lsrtn = lsrtn + CStr(li1 Mod li_pass) li_pass = li_pass + 8 lc = Mid(ls_pass, li, 1) li1 = Asc(lc) lsrtn = lsrtn + CStr(li1 Mod li_pass) li_pass = li_pass - 11 li_len = li_len - 1 li = li + 1 Loop aaa = lsrtn End Function |
|
[求助]PB源玛转C++编译或其他语言编译
有输入输出的实例吗?这样好测试。就是输入什么,结果得到什么? |
|
[原创]创建流氓的快捷方式[带源码]
直接拖回收站不行吗 |
|
[原创]写了个驱动,隐藏cmd.exe进程(高手别看)
没有处理cmd.exe在链尾的情况,这样会不会蓝屏? *((ULONG*)listEntry->Blink) = (ULONG)listEntry->Flink; *((ULONG*)listEntry->Flink+1) = (ULONG)listEntry->Blink; 这两句中的第二句看不明白,可以指点一下吗?我觉得第二句应该不需要了。因为第一句就把listEntry的指针向后移了,Fink是指下一个指针,*((ULONG*)listEntry->Flink+1) 是什么意思?为什么要指向Bink,这样的话,这个结构不是两个指针都指在同一个地方?改成? *((ULONG*)listEntry->Blink) = *((ULONG*)listEntry->Blink+1) ; *((ULONG*)listEntry->Flink) = *((ULONG*)listEntry->Flink+1); 行吗? |
|
[分享]Ring3下WX方法结束微点2009
把结束代码做成DLL注射到svchost里面不知道行不行?又或者把TerminateMP.exe改名成svchost.exe呢? |
|
[求助]关于C++的问题请高手指点一下
非常感谢nimda,也感谢其它热心帮我的朋友。 位控制我是理解了,“避免类型转换”还是有点不理解。 还有,deviceiocontorl传这个结构是不是要传三次?我在OD中就发现断下三次,第一次是MOUSE_INPUT_DATA 结构,第二次貌似ULONG Buttons;第三次是LONG LastX;LONG LastY;而且每次的发送缓冲尺寸都是0x10,即16字节,MOUSE_INPUT_DATA这个结构应该不止16字节吧。 |
|
[求助]关于C++的问题请高手指点一下
先谢谢了。 不我理解的是“使用第一个成员名称还是使用第二个成员名称,它们都会访问同一个地址”,同一个内存地址能放两个或多个数据吗?在赋值的时候,当我向第一个成员赋值以后,共用体的内存就是第一个成员的数据,但是当我向第二个共用体成员赋值的时候,如果内存相同,那第一个成员的数据就被覆盖了,如果我要引用第一个成员时那怎么办,难道被覆盖的数据还存在? |
|
[求助]关于C++的问题请高手指点一下
我查了MSDN还是不理解,内存怎么能共用啊,如果共用的话,当我引用这个结构体时它到底是什么状态? 是: typedef struct MOUSE_INPUT_DATA { USHORT UnitId; USHORT Flags; union { ULONG Buttons; //struct { //USHORT ButtonFlags; //USHORT ButtonData; //}; }; ULONG RawButtons; LONG LastX; LONG LastY; ULONG ExtraInformation; } MOUSE_INPUT_DATA, *PMOUSE_INPUT_DATA; 还是: typedef struct MOUSE_INPUT_DATA { USHORT UnitId; USHORT Flags; union { //ULONG Buttons; struct { USHORT ButtonFlags; USHORT ButtonData; }; }; ULONG RawButtons; LONG LastX; LONG LastY; ULONG ExtraInformation; } MOUSE_INPUT_DATA, *PMOUSE_INPUT_DATA; 当我们引用一个变量时,这个变量的内存是定下来的了,应该是引用这一时该的内存值,但是共用体这个概是什么意思呢?当我们引用时他在共用体时的内存是什么?就算共用的内存是动态的,我们读取内存值时只是在读的那一刻起作用,也就是说读的时候共用体内只读了其中一个数据,共用体内的另一部份数据就没有被读到,那部分数据还有什么意义呢?难道引用一个内存共用体时要读多次?那么,每一次所读的内存数据是什么呢? |
|
[求助]关于C++的问题请高手指点一下
在内存中是怎么排放的?或者说是怎么排列的?实在不能理解共用内存这个概念.deviceiocontorl函数传这个结构要怎么执行?是不是要传三次? |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值