|
为什么用OD附加运行中的程序时,都不能正常调试?
我也遇到同样的问题,但是我在2000下可以正常使用,在XP下,前两个月还可以,现在到了ntdll.DBgBreakPoint,就会显示 “从注入的代码中没有得到应答”的对话框,具体的内容是: 通常情况下此操作不被OS所支持,Ollydbg尝试注入简短的代码部分到被调试的程序中,但是没有在5秒内接收到应答。你希望再次等候5秒钟吗? 一开始以为是3721的CnsMin.dll作怪,结果卸了还是老问题。难道是因为安装升级了XP SP2? 请大侠们帮忙啊。我用的也是fly版。 |
|
@@LStrAsg是什么函数?
谢谢hydonlee! |
|
关于Delphi中参数的传递和函数值的返回
Roba老大 小的不才,斗胆给你解释一下最后一段的疑惑
以下的解释只是我个人的理解,并没有看到有关的官方资料,有待确认。 Delphi除了利用寄存器、栈(Stack)来传递参数和存放局部变量外,还利用了很重要的一种数据结构:堆(Heap)。堆通常放在比较高的地址段,感觉象malloc这样用于动态分配内存的区域。 上面代码中,edx,eax都是GetText的参数,GetText会将字符串内容复制一份到堆中,并将堆指针赋给edx。因此,局部变量[ebp-$04]是用来存放字符串指针的。(当然,我们也可以就把它看成字符串) eax存放的是Tedit的对象ID(不知道Borland怎么称呼它),只用通过它,GetText例程才知道从哪个对象中获取字符串。这就象我们司空见惯的窗口句柄、进程ID一样。 另外值得注意的一个地方是所有的对象ID都存放在一个地方,这就象GDT,LDT一样,有这么一个ID表。因此在Delphi的编译代码中,对对象的引用总是以[ebp+offset]的方式。从另一个角度来说,知道这个基址ebp对逆向分析来说是很有帮助的。 希望我的解释能给大家一些提示。 |
|
|
|
关于程序员杂志一篇文章的看法
同意likedust的观点。网络游戏之所以赚钱,就因为网络杜绝了盗版。或许以后用什么软件都要在线使用,然后cracker都变成hacker了。 |
|
新手求助,那有OllyDbg的教程
linhanshi,谢谢你的链接和总结 |
|
借看雪人气,开个翻译专区
支持 |
|
我的第一篇“小菜”之作
我也是小菜一碟,让我们互相鼓励、互相帮助、共同进步。:D |
|
菜菜鸟请大虾指点迷津(处男作)
经过一个星期的努力和大虾们的指点,终于将我的“处男作”完成了。 实现的目标包括: (1)找到分数的记录位置,修改分数,并保存在分数榜中; (2)实现无限制洗牌; (3)实现直接进入某一关卡; (4)解决脱壳后,只能玩easy级的问题。 将自己的一些心得体会贴出来,与大家分享。希望能继续得到高手们的帮助。 xiv.实现无限制洗牌的方法。 1.是洗牌次数用完后,会弹出一个“已无牌可走”的对话框。 2.通过Ultra Edit获取“已无牌可走”的Unicode编码,然后在ida中搜索到字符串的位置; 3.根据对字符串的引用,找到对应的编码在00485acd处。 4.然后将次数减一及判断跳转的指令去掉即可。 xv.实现直接进入任意关卡的方法 1.每关结束后,都会弹出“成功完成第n关”的对话框。 2.通过该对话框找到存放关数的位置在004a30ce处。 3.然后利用bpmw 004a30ce w设置对该处的写断点,找到对应的初始化关数代码在004894ff。 4.然后在004a2394处找到代码空隙,于是加一个跳转,然后赋予任意关数值,然后再跳回。对机器指令仍然不是很熟悉,用到的指令包括: a)jmp rel32 (E9 xx xx xx xx) : 32位相对跳转; b)mov word ptr mem,imm (66 C7 05 MM MM MM MM ww ww ) xvi.目前来看,以上解决的3个问题都是利用bpx msvbvm60!rtcMsgBox设置对话框断点解决。对于菜单的截取,因为涉及消息处理机制,所有的消息是通过回调消息处理函数解决的。因此跟踪时通常进入底层代码,无法去到上层代码中去。 xvii.继续研究消息处理代码,解决只有easy级别的问题。 1.这个问题花了一天的时间,终于解决了。在VB编写的程序中,并没有直接调用user32!EnableMenuItem。从EnableMenuItem到用户的应用程序,还隔了几层调用。另一方面,通过F12无法跟踪到调用代码,或许是这种程序结构实现了隐藏: push Offset_NextAddress jmp Loc_Ret … Loc_Ret: ret 因此必须老实的用F10一步一步返回。 2.通过跟踪,发现对菜单的屏蔽是写在程序里的。因此估计压缩时还添加了恢复这些菜单的代码。因此用Aspdie并没有完全将代码还原。 3.设置菜单的代码入口点包括:(参数0为禁止,FF为开启) a)0047BCB9:(提示) b)0047BD3D:(洗牌) c)0047BD9D:(暂停) d)0047BE0A:(放弃) e)0047BF29 f)0047BFEA g)0047C0AB h)0047C16C i)0047C22D j)0047C2EE xviii.通过对这个程序的破解,感觉还需要更多的了解底层的东西。另外需要《Windows API》以及《Intel opCode》的相关资料。对于指令代码,目前的资料都描述得不是很清楚,或许真的需要看Intel提供的资料。 最后再次感谢看雪,感谢各位高手,感谢精神上支持我的老婆! |
|
大家来研究菜单按钮
你这个菜单用exeScope就可以打开了。 |
|
菜菜鸟请大虾指点迷津(处男作)
10搂,这个游戏不是我自己玩,不会要教我老婆怎么用game expert 吧。 无限洗牌的问题解决了,在00485acd处连续修改为10个nop. 关数记录在004a30ce处,现在问题是如何一开始游戏就进入第3关呢?如果说用户直接输入关数,则要增加的代码或许比较多。 |
|
|
|
菜菜鸟请大虾指点迷津(处男作)
分数的问题我已经解决了,就放在004A3134,唯一高明之处是它以单精度实数的形式存放的,即IEEE浮点格式标准。这也是一般的游戏修改器无法捕抓到它的原因。 现在将目标转移到如何修改提示次数和直接进入任意关卡的问题上,这个程序可能是因为汉化的原因,菜单是程序执行后生成的,exeScope无法捕抓到。 利用消息断点 bmsg xxxxxxxx wm_char截取键盘消息,也无法获取。 游戏中获取提示的快捷方式是F5, 利用wm_keydown仍然无法截取按键。估计被处理菜单快捷方式的消息处理函数处理掉了。我现在想知道的就是如何截取用户选取菜单的消息。 nbw,可不可以告诉我你当时是怎样分析那个菜单的?谢了! |
|
菜菜鸟请大虾指点迷津(处男作)
谢谢nbw和lordor。 我利用ida查找rtcMsgBox,终于找到了存储分数的位置在004A3134.(这是脱壳后的程序) 然后利用softice拦截rtcMsgBox,此时已进入msvbvm60. 利用D命令,显示004A3134的数据,显示00005234(实际上我的分数只有210分),从ida显示程序在读入数据后,还调用了__vbaStrR4.代码如下所示: .text:00485EC2 8B 15 34 31 4A 00 mov edx, dword_4A3134 .text:00485EC8 50 push eax .text:00485EC9 52 push edx .text:00485ECA FF 15 24 11 40 00 call ds:__vbaStrR4 不知道这个函数有什么功能? 另外一个疑问是,代码段和数据段的选择子为何不一样,代码段为001b,数据段确是0010. |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值