|
|
|
如何获取其他进程list控件中的文本
用windows hook,按以下步骤 1.安装dll 钩子 hook进了列表程序进程 1.FindWindow获取程序窗口句柄gHwnd. 2.FindWindowEx根据gHwnd获取listview控件句柄listhwnd. 3.count=ListView_GetItemCount(listhwnd)获取数据个数 4.遍历:ListView_GetItemText(listhwnd,行数,列数,接受数据数组指针,1); 5.上面提到的函数都是系统API 注意,一定要用hook,或者线程注入,因为ListView_GetItemText只在本进程有效 你试下,有问题再说 |
|
有个DLL文件,怎么做个exe来调用它啊
1.如果有头文件和对应lib文件 可以显式调用,在源代码中引用头文件和lib 2.如果没有,但是知道函数的参数个数,类型和返回值类型 可以隐式调用,先用LoadLibrary函数加载,构建函数对应参数和返回值类型的函数指针, 指向getprocaddress获取的导出地址,就可以直接调用这个导出函数了 3.如果不知道导出函数的参数个数及类型 可以通过ida加载dll,然后分析导出函数的参数个数和类型,然后按照(2)的方法调用 如果连导出函数是做什么的都不知道,那也就没什么意义了 并且如果是导出类,或者是特别复杂的函数,基本就没什么希望了 4.如果你说的仅仅是在编译好的exe文件中加载dll 那么就是很简单的修改PE文件的导入表,加入dll的名字和用到导出函数的名字, 接着修改exe文件代码段,可以用汇编把函数调用写好转成机器码,再写入代码段 |
|
包含mfc的dll的问题.
看来在哪都能碰到不结贴的,都回答那么清楚了 |
|
[调查]看看积分
我也看看,还是踏实点好 |
|
[求助]新加入一个导入表的问题
是不是和exe文件的编译方式有关啊? 如果是unicode编码编译的,和ANSI编码编译的, 可能对的路径识别方式不一样 看你弹出的错误提示,是有乱码的 把dll文件名改成英文的试试 |
|
包含mfc的dll的问题.
ShowWindow(SW_HIDE)对窗口进行隐藏时,并未有效的释放资源 而模态对话框弹出时的影响对于这些隐藏窗口的资源进行了很好的释放, 非模态的对话框在释放指针前, 需要自己调用distroy函数销毁窗口 可以改为 int CRxjhFzDllApp::ExitInstance() { // TODO: 在此添加专用代码和/或调用基类 if (NULL != g_wgDllDlg) { g_wgDllDlg->DestroyWindow(); delete g_wgDllDlg; g_wgDllDlg = NULL; } return CWinApp::ExitInstance(); } |
|
[求助]16进制转换10进制
16进制最后一位是标志位,说明是有效数字是前几个 然后10进制结果是有效数字之和 0x2301 > 2 既末尾1为标志位,所以有效数字是第一个数字2,结果为2 0x3301 > 3 既末尾1为标志位,所以有效数字是第一个数字3,结果为3 0x8123 > 11 既末尾3为标志位,所以有效数字是前三个数字812,结果为8+1+2=11 0x8153 > 14 既末尾3为标志位,所以有效数字是前三个数字815,结果为8+1+5=14 |
|
路由器弱口令利用
没事做个vpn什么的,以后上网干坏事就有人背黑锅了 加个sniffer端口,定向到自己机子上,看看有没有什么东东 看看有人上班时间偷偷看av没 不行,就给人玩玩ip冲突什么的,把内网的一些机子晒到外网 给内网机子映射到外网玩 做个dns欺骗,定向到自己指定的网站 最后,把得到的密码和网管说说,交流交流,社工一下 做人要厚道哦 |
|
|
|
急,菜鸟求援。。。
lea ecx, dword ptr [esp+12C0] //[esp+12C0]=[12E408],[12E408]=0 call 006A78D0 push edi //edi=0 lea ecx, dword ptr [esp+12C4] //压栈一次esp-4,相当于[esp+12C4]=[12E408] push 0A push ecx mov dword ptr [esp+12CE], eax //共压栈3次,相当于[esp+12C4]=[12E408] add esp, 0C mov ecx, dword ptr [C0980C] mov edx, dword ptr [ecx] push edi push 0A lea eax, dword ptr [esp+12C8] //add esp, 0C,再压2次栈,[esp+12C8]=]=[12E408] push eax call dword ptr [edx+10] 所以,这里的操作,基本上都是针对固定的栈地址=[12E408]操作的! 可以先保存下这个地址,写起来就清晰多了 mov ebp,esp mov byte ptr [ebp], 16 mov byte ptr [ebp+1], 60 mov dword ptr [ebp+6], 0 push 0 mov ecx,ebp //这里相当于这个,不存在不可读的问题 push 0A push ecx mov dword ptr [ebp], ebp //这里eax=ebp=12E408,相当于【12E408】=12E408,也不存在不可写的问题 mov ecx, dword ptr [C0980C] mov edx, dword ptr [ecx] push 0 push 0A mov eax,ebp push eax call dword ptr [edx+10] |
|
急,菜鸟求援。。。
子调用 mov eax, ecx mov byte ptr [eax], 16 mov byte ptr [eax+1], 60 mov dword ptr [eax+6], 0 retn 其实是隐式返回了值,改变了eax值,返回eax 所以原程序mov dword ptr [esp+12CE], eax是正确的 而你的mov dword ptr [esp+0E], eax ;eax都没有初始化,怎么会正确啊? |
|
如何用内联汇编编写一个对话框,不用C中的变量
这是我修改后的代码 去掉了里面的一些堆栈平衡的 "add esp,7",不是所有的函数调用都用 add esp,7的 改成如下,红色是我加入的代码,去掉了你原来的堆栈平衡代码 __asm { shell: PUSHAD mov ebp,esp MOV EAX,DWORD PTR FS:[30H] MOV EAX,DWORD PTR [EAX+0CH] MOV EAX,DWORD PTR [EAX+1CH] MOV EAX,DWORD PTR [EAX] MOV EAX,DWORD PTR [EAX+08H] MOV EBP,EAX MOV EAX,DWORD PTR [EAX+3CH] MOV EAX,DWORD PTR [EBP+EAX+120] MOV ECX,[EBP+EAX+24] MOV EBX,[EBP+EAX+32] ADD EBX,EBP PUSH WORD PTR 0X00 PUSH DWORD PTR 0X73736572 PUSH DWORD PTR 0X64644163 PUSH DWORD PTR 0X6F725074 PUSH WORD PTR 0X6547 MOV EDX,ESP PUSH ECX F1: MOV EDI,EDX POP ECX ;导出表中导出函数名字的数目 DEC ECX TEST ECX,ECX JZ EXIT MOV ESI,[EBX+ECX*4] ;取出一个函数 ADD ESI,EBP ;函数真实地址 PUSH ECX MOV ECX,15 REPZ CMPSB ;比较edi,esi是否相等 TEST ECX,ECX JNZ F1 POP ECX MOV ESI,[EBP+EAX+36] ADD ESI,EBP MOVZX ESI,WORD PTR[ESI+ECX*2] MOV EDI,[EBP+EAX+28] ADD EDI,EBP MOV EDI,[EDI+ESI*4] ADD EDI,EBP ;取得GetProcAddress函数的地址 ;mov EDX, addr ;mov [EDX+aGetProcAddress],EDI PUSH WORD PTR 0X00 PUSH DWORD PTR 0X41797261 PUSH DWORD PTR 0X7262694C PUSH DWORD PTR 0X64616F4C PUSH ESP PUSH EBP CALL EDI ;mov EDX, addr ;mov [EDX+aLoadLibrary], EAX ;mov EBX, [EDX+u32] ;push EBX ;CALL EAX PUSH WORD PTR 0X00 PUSH DWORD PTR 0X6C6C642E ;. PUSH DWORD PTR 0X32337265 ; . PUSH WORD PTR 0X7355 ; PUSH ESP CALL EAX ;user32.dll的基址 MOV EDX,EAX PUSH DWORD PTR 0X0041786F ; PUSH DWORD PTR 0X42656761 ; PUSH WORD PTR 0X7373;se ; PUSH WORD PTR 0X654D ; PUSH ESP PUSH EDX CALL EDI MOV EBX,EAX ;MessageBox地址 PUSH WORD PTR 0X00 PUSH DWORD PTR 0X41424344 ;显示内容; PUSH DWORD PTR 0X31323334 mov ECX,esp PUSH WORD PTR 0X00 PUSH DWORD PTR 0X61486148 ; 标题; mov EDX,esp PUSH 40H+1000H PUSH ECX PUSH EDX PUSH 0 CALL EBX ;调用MessagBoxA EXIT: mov esp,ebp POPAD } |
|
修改游戏中呼唤出的外挂窗体名称的疑问!!!
是你在dll中的szBuf指针指向不同进程内存区域 在dll用指针时,一定要注意 1.你这szBuf个指针赋值时是在游戏进程内调用sethook赋值,所以是szBuf指向游戏进程地址空间,所以,游戏中怎么用都可以 2.外挂中回调函数用的时候,是在dll当前所在进程找szBuf指向的地址,但是dll是所有进程公用的,调用时不一定在哪个进程作用域内,所以为null 解决方法 #pragma data_seg( "mydata ") char g_szBuf[MAX_PATH] = ""; //全局的数据 #pragma data_seg() #pragma comment (linker, "/SECTION:mydata,RWS ") 说明g_szBuf是分配在dll的数据共享段 这样就不会出错了 |
|
[求助]关于内存搜索的问题
1。基地址一般就是个指针类型的内存地址。一般存在了数据段(基本不会在堆栈段)。 2。基址偏移量,就是对象固定属性距离基地址的相对位置。如果对基本汇编和c++不熟的话,就判断这个地址指向的值,在对象的属性发生变化时是不是随着变化,并且在程序重启后是不是不变。基本上就可确定是不是基址。 3。现实中最有可能是基址是多级指针,用CE在内存中16进制搜索找到的属性(如游戏人物血量)地址,如果能找到几个内存,就要看谁改写了,看怎么改写的,一般改写内容的指针会保存在ESI,ECX,EDX这些寄存器中,接着再搜索这些新找到的指针地址,看还有没有更高级的指针,直到找不到,并且满足2就离真相很近了. 4.一般查找基址,最好用CE结合ollyice动态调试,用ce找到改写对应内存的代码地址,在ollyice中下断点,动态跟踪,很容易确定。 如果,你还不明白的话,建议你先把CE的教学程序通关,熟悉下ollyice,再补点基础知识 |
|
网页数据包的处理!
加我QQ:29016202 |
|
网页数据包的处理!
投票一般都是根据ip限制,或者cookie来限制,一定时间只能投一票 1.想改随机的票数,可以截了包,修改值后用nc.exe(就是网络军刀 )发送, 命令格式 nc xxxxx.com 80 < bao.txt 2.对于ip和时间限制,就可以用http流量刷新器+代理猎手找到的http代理表进行刷票 以前我弄过 |
|
|
|
我的XP系统是不是出了问题导致OD无法调试软件?
1.到【选项】-》【调试设置】-》【反汇编】,因为是微软编译器编译,选中masm, 2.到【选项】-》【调试设置】-》【异常】,里面全选 3.把 OllyICE\UDD文件夹下的文件全部删除,以前的保存的东西,可能会影响当前调试 4.看看开了360或别的杀毒没有,暂时关闭试验下 |
|
我的XP系统是不是出了问题导致OD无法调试软件?
按你的步骤 1.加载notepad.exe: 这时是停在入口 2.运行,这时应该是notepad窗口弹出,处于激活状态 3.暂停,这时记事本会挂起 4.再运行,没设置断点,或者断点没停下时,程序会结束运行,显示已终止 所以,你再看下,你是不是按照上面的步骤做的,如果断点没断下 那么结束是正常的 如果异常,那么看看你的ollyice的cpu选项是不是选的intel 杀毒软件是不是开了,有可能会冲突 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值