|
[求助]我在使用OD和CE时候遇到的点问题!!
anti-attach,最常见的是hook ZwContinue |
|
[求助]OllyDBG 跟踪遇到 int 2b 如何再跟下去?
这当然是不能跳过的,这里是某回调函数返回内核的地方,你跳过了,这个回调函数就飞了。 具体解决方法我想了想,因为我没有遇到过这样的情况,没有验证,所以可能不正确,不过可以试试。 走到int 0x2b这条指令后,打开OD的内存镜像窗口,在代码段上F2下断点,然后直接F9,回调函数执行完毕,内核会返回被中断的线程,此时应该会立即中断的。 此方法仅供一试,有什么问题的话再反馈,或者把你调试的程序发给我,我试试看能不能想到办法。 |
|
[求助]关于非加壳式资源加密
不管如何加密,最后使用时都必须解密。 可以从资源的使用入手,比如位图资源,试着下BitBlt,找到解密后的资源的存储位置,然后对此下内存断点,重新运行程序时,有一定概率能断在资源解密的大概位置,跟一下解密的处理过程试试。 |
|
[求助]修改reloc段,加载dll出错-内存分配访问无效
详细说一下,你都修改、增加、删除了哪些地方的哪些内容。 用OD跟一下修改后的dll,不要忽略内存异常,这样遇到异常时,顺着堆栈可以大约找到引发异常的代码,再分析一下是哪个指针出错了,为什么出错等。 |
|
[求助]关于dede 反汇编Delphi 的问题?
这样和直接发一个附件一样,说明你自己并没有分析过,目的就是让别人给你分析,而不是来学习分析方法的。 大家应该知道本论坛是学习方法技术的,不是来找破解结果的。 自己先试试跟一跟,遇到问题再来提问,不要指望别人把一切都给你做好。 |
|
[求助]AdvancedOlly.dll问题求助?
窗口句柄每次创建时都不一样,你用spy++查看到的是句柄根本就不是被调试的OD的窗口句柄。 我再给你详细说一遍,最后一遍,剩下就全看你自己了。 启动调试器,我们用OD1来称呼它,用它加载另一个OD,我们用OD2来称呼它。 现在,OD1是作为OD2的调试器的。在OD1中按F9让OD2运行 在OD1里按 菜单栏的 查看->窗口,然后 右键->刷新,看到OD2的目前所有的窗口,此时标题还没隐藏,所以能看到“OllyICE - CPU”的标题,记下这一行的第一列中的句柄值,如下例中是0015073a Windows 句柄 标题 父窗口 WinProc ID 风格 扩展风格 线程 ClsProc 类 000D0714 Desktop 000003E8 44A09141 00000080 主 7D966093 ComboLBox 000F070E Topmost 84000000 00000080 主 04617574 TPUtilWindow 0015073A OllyICE - [CPU] Topmost 034A0711 17CF0000 00000110 主 004323D4 pediy06 K001006F0 0015073A 52000001 主 7D981C2F MDIClient IE000D0712 CPU 001006F0 00000BB8 57C70000 00000140 主 0041D1DC ICPU INK000B070A 000D0712 50200000 主 00426230 ICPUSTACK INK000E071C 000D0712 50200000 主 0041E604 ICPUASM INK001006EE 000D0712 50200000 主 00425E40 ICPUDUMP INK00130746 000D0712 50000000 主 00427A04 ICPUINFO INE001906D2 000D0712 50000000 主 0042A878 ICPUREG K0015070C 0015073A 50000080 主 7D960F28 Button K0016072C 0015073A 84800003 00000088 主 FFFF06F3 tooltips_class32 K00230700 快捷命令 0015073A 50000000 主 045D2E34 OT_PLUGIN_0002 IK001406CA 00230700 000003EA 50001000 00020000 主 7D96A455 Static IK001806D8 00230700 000003E9 50010E42 主 7D963749 ComboBox IIE000C06CE 001806D8 000003E9 50000380 主 7D9637BF Edit IE001D06E2 命令 : 00230700 000003EB 5000000B 主 7D96A455 Static E005806F4 Default IME 0015073A 8C000000 主 7D9A0638 IME NE001906FE M 005806F4 8C000000 主 FFFF079B MSCTFIME UI 00160748 Select Conditional Branch Types Topmost 06C00000 00000188 主 04651DF8 TDLLForm2 001806D0 Topmost 84000000 00000080 主 04617574 TPUtilWindow 然后在OD1中下断点: bp SetWindowTextA [esp+4]==0x15073a 现在切换到OD2,随便加载一个程序,使Advanced插件开始工作,则会触发断点,OD1激活,看到堆栈中: 0013D3F4 10001985 /CALL 到 SetWindowTextA 来自 advanced.10001980 0013D3F8 0015073A |hWnd = 0015073A (' - [CPU]',class='pediy06') 0013D3FC 1000A2B6 \Text = "" 来到10001980这个返回地址并往上翻一下就看到了: 10001970 3B05 53C00010 CMP EAX, DWORD PTR DS:[1000C053] 10001976 75 0F JNZ SHORT advanced.10001987 10001978 68 B6A20010 PUSH advanced.1000A2B6 1000197D FF75 08 PUSH DWORD PTR SS:[EBP+8] 10001980 E8 73720000 CALL <JMP.&user32.SetWindowTextA> 10001985 EB 0B JMP SHORT advanced.10001992 10001987 FF75 0C PUSH DWORD PTR SS:[EBP+C] 1000198A FF75 08 PUSH DWORD PTR SS:[EBP+8] 1000198D E8 66720000 CALL <JMP.&user32.SetWindowTextA> 如果不想让它改变窗口标题(我还是不理解为什么不想改标题,这有什么影响吗?),那就把10001980片的call改成add esp,8就行了。 我上面所说的NOP掉(注意堆栈平衡),并不是必须用NOP指令填充,所谓NOP掉就是指把代码改掉让它不执行原来的操作而已。 如果还不明白,自己找资料从最基础的知识学起。 |
|
[求助]怎么在这几行代码插入2行呢?谢谢先
在只有二进制文件没有源码的情况下,给程序增加功能,必然要给程序打补丁。 方法也有很多种。一种方法是将所要增加的功能写成一个函数,放到一个dll中,然后在程序中patch代码来调用dll中的函数。 另一种方法,适用于只要增加简单的功能的情况,就是直接用patch代码来实现所需要的功能。 总之,不管什么方法,对原来的程序进行修改,都必须掌握一定的汇编语言的基本功。 比如你的例子,相当于要在1.exe中自己手写汇编代码来实现编译器由 cout < <"j在内存中的地址是:\"" < <&j < <"\"" < <"\n"; 生成的同等功能的代码。 首先要定位到要插入功能代码的位置,本例中是以下这行代码之前 cout < <"i在内存中的地址是:\"" < <&i < <"\"" < <"\n"; 要在反汇编代码中准确地认识哪条指令是属于源代码中哪个功能语句的。 找到合适的patch点,记住原来的指令是什么,因为patch要破坏掉一部分指令,为保证程序不出错,最后还必须恢复之。 常规的patch方法就是把要增加的代码写到.text节尾部那些0000的地方,然后在patch点插入一条jmp指令跳转到增加的代码当中执行,代码最后将被jmp指令破坏的指令还原后再jmp回patch点之后那里即可。 |
|
[求助]怎么在这几行代码插入2行呢?谢谢先
没明白你的意思。问题描述得不够清楚是没有人回答的很重要的原因。 |
|
[求助]AdvancedOlly.dll问题求助?
用OD调试另一个OD进程,查看OD的主窗口句柄,假设是xxxxxxxx,然后下条件断点 bp SetWindowTextA [esp+4]==xxxxxxxx 用被调试的OD随便加载一个程序,只要让插件工作,调试的OD就会断在SetWindowTextA处,然后返回就到我给出的代码了。 |
|
[求助]0F34的问题
要跟踪到系统内核,要么使用内核级的调试器,如SoftIce,或者WinDBG,要么就使用带调试功能的虚拟机,如Bochs。 不过要Bochs安装Windows真不是件简单的事啊。。。 |
|
[求助]怎么拦截按纽
没有vista,不太清楚。反正遇到clsproc在内核中的,基本都是系统服务建立的窗口,普通的消息断点是无效的。 |
|
[求助]大家看看这个重启验证怎么破解?我研究2天了。
是重启后网络验证,就是到服务器上查一下你的名字是不花了钱的用户,没有算法,最多爆破。 脱壳后,下断点004a86d0,这个函数是就是程序启动时读取信息并向网络发送的函数。网络操作是调用dll中的函数进行的。 剩下的分析代码、寻找爆破点你自己来。 |
|
[求助]0F34的问题
ring0 - ring3 是CPU的4个不同的特权级别,你把保护模式的相关知识多看一遍就懂了。 INTEL这样设计,最初是这么设想的(不是我编的,是在某本很古老的小手册上看到的):ring0运行(微)内核代码,ring1运行设备驱动程序,ring2运行系统服务代码,ring3是留给应用程序的。 实际上现代操作系统绝大多数都只使用两个特权级别来区别对待用户代码和内核代码。不过听说四川国芯他们有一伙人做的那个未来Alpha的内核,似乎用了多个特权级,不过这个东西还在开发中,也不开源,所以无从考证。 |
|
|
|
[求助]修改reloc段,加载dll出错-内存分配访问无效
.reloc这个节中存放的是重定位表,dll不像exe,它的默认加载基址(通过连接器参数指定)在某个进程的地址空间中有可能无法使用,系统只能将它加载到另外一个地址,此时程序中全局变量以及函数指针等“地址”都需要进行修正,这个过程就是所谓的重定位(加载器重定位,另外还有一种连接器重定位,是另外一回事,与此无关),而重定位表中的表项就是记录了哪些数据是指针,指针类型以及需要修正的size等信息。 你破坏了重定位表,dll文件就无法正常加载了。 有关重定位的知识,自己参考一下相关文档,如微软的PE格式、ELF标准文档等。如果要深入学习,有一本书叫《连接器与加载器》,可以看一下。 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值