|
[求助]WriteProcessMemroy问题
如果你要改代码的话,首先必须有一个反汇编/汇编引擎,将指令解析,对于分支和跳转指令,就必须重新计算偏移量。把“汇编”后的机器码,直接写入到想要的地址去就可以。 资料:MSDN98中对该API的解释 BOOL WriteProcessMemory( HANDLE hProcess, // handle to process whose memory is written to LPVOID lpBaseAddress, // address to start writing to LPVOID lpBuffer, // pointer to buffer to write data to DWORD nSize, // number of bytes to write LPDWORD lpNumberOfBytesWritten // actual number of bytes written ); Parameters hProcess Handle to the process whose memory is to be modified. The handle must have PROCESS_VM_WRITE and PROCESS_VM_OPERATION access to the process. lpBaseAddress Pointer to the base address in the specified process to be written to. Before any data transfer occurs, the system verifies that all data in the base address and memory of the specified size is accessible for write access. If this is the case, the function proceeds; otherwise, the function fails. lpBuffer Pointer to the buffer that supplies data to be written into the address space of the specified process. nSize Specifies the requested number of bytes to write into the specified process. lpNumberOfBytesWritten Pointer to the actual number of bytes transferred into the specified process. This parameter is optional. If lpNumberOfBytesWritten is NULL, the parameter is ignored. Return Values If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError. The function will fail if the requested write operation crosses into an area of the process that is inaccessible. |
|
|
|
[求助]请教一下cmp跳转的问题
你知道C中的continue语句是什么作用吗? 你注释中标记的分支,前一处为循环体内的continue; 后一次为循环体本身。 不明白整块代码的“意思”,只知道单条指令的作用,是无法读懂算法的。 要从编程的基础学起啊。 这是一个基本的循环遍历一个集合(数组,链表,向量),寻找其中满足一定条件的元素,而真正的“工作”是在找到了之后,也就是continue跳过不满足条件的元素,当遇到满足条件的元素时,continue语句不执行,而执行它之后的代码,这里才是关键的算法。 具体这一段程序的内容,从所贴出来的代码无法得到更多的信息,但我可以写一个流程类似的“演示”伪C代码,来说明这个循环的结构,如下: for( each element e in container C ) { if ( some_condition_is_meet ) continue; // here we do something useful e.do_something(); } 希望对你有所帮助。 |
|
|
|
[求助]MoleBox主程序脱壳,捆绑文件DUMP问题
我没有分析它的注册过程,因为我拿到的程序是注册好的。 而且可以正常运行,压缩。 我随便压一个文件,日志如下,并没有错误的: target executable D:\Documents and Settings\PZC\桌面\Temp\gncrk.exe.exe Relink 4 sections of executable SECTION 0( UPX0): + compressed 167936 -> 92401 bytes + encrypting 94208 bytes + adding 94208 bytes SECTION 1( UPX1): ! contains TLS directory + adding 122880 bytes SECTION 2( .rsrc): + adding 4096 bytes SECTION 3( .snaker): + compressed 8192 -> 2483 bytes + encrypting 4096 bytes + adding 4096 bytes integrate bootstub SECTION 4: 73728 bytes SECTION 5: 8192 bytes SECTION 6: 32768 bytes bootstub compressed to 65536 bytes set target executable size to 294912 bytes (96% of 307200) STATISTICS size of program - 229376 bytes size of bootstub - 65536 bytes size of box - 0 bytes total size - 294912 bytes exe packing - enabled exe CRC check - disabled bootstub - release SUCCESS |
|
[求助]MoleBox主程序脱壳,捆绑文件DUMP问题
终成正果。 完整DUMP出程序执行所需要的mbox2_bootupLt文件。 现在已经可以完美运行了。 经测试,资源可编辑,DUMP成功。 庆祝。 感谢 脱衣DIY 帮忙DUMP出至关重要的MSkinCore.dll文件,以及同样重要的mbox2_blacklist.txt文件。 附件中是程序运行所需要文件打包,此4个文件便构成软件的全部功能。包括主程序dump_.exe(自己改名吧),MSkinCore.dll,mbox2_bootupLt,以及mbox2_blacklist.txt (注1:主程序dump_.exe和捆绑程序用的头mbox2_bootupLt由本人dump。MSkinCore.dll由sessiondiy提供。我是在他工作的基础上才得以完成。) (注2:sessiondiy同学提供的register.dll并未看到它有什么用。可能是旧版本遗留的东西。所以没有上传。) (注3:它非常迷惑人的blacklist文件并不是什么黑名单,其实是授权文件。由sessiondiy提供。本人不知道它的授权来自哪里) MoleBoxPro.rar PS.我搞这个是看到了自由自在同学想要汉化它的帖子。现在你可以进行你的工作了。原贴在这里: http://bbs.pediy.com/showthread.php?t=76304 回sessiondiy: 考试就在眼前。 我就是想把这个弄完,要不心里总惦记着,复习不踏实。 |
|
[求助]MoleBox主程序脱壳,捆绑文件DUMP问题
啊,是我搞错了。 那三个导出的名称不是函数,是变量。 原来是因为我修复时,不小心把入口点地址真错了。现在已经能运行了。 但是我试了一下,虽然能运行,但还没有DUMP完整,可能是把某些资源给丢了。 我用它随便给一个程序加壳,提示 -- ERROR, process aborted -- Can't open bootup stub 应该是把这用来给捆绑的程序解码的那部分资源给丢了。哪位大侠帮忙修复一下。 压缩包里是我DUMP出来的主程序,如果缺少文件请找上面sessiondiy的贴子。 原程序到这里下http://bbs.pediy.com/showthread.php?t=71284 |
|
[求助]对一系列问题的茫然,能否有人指点一二,关于delphi程序机器码注册无反应
你让它自己和自己比,也是爆破。 看来你对爆破的概念有太清楚。 另外,不要谈什么外行不外行的话,谁都有个进步的过程。 LStrCmp的两个参数需要是字符串,也就是C中的“以0结尾的字符数组”,不是字符值。 你如果不想爆破,就必须能够读懂整个验证过程的代码的意思,才能得到真正的注册码。非明码比较,一般来说,不能通过跟踪“看到”真正的注册码,要得到真码,必须看懂算法。 算法的阅读用IDA更容易看懂。 再加油。胜利就在前方! |
|
[求助]MoleBox主程序脱壳,捆绑文件DUMP问题
脱衣DIY同学,请再看看你DUMP出的MSkinCore.dll,其中有3个导出函数无效。 如图,LordPE窗口不能放大,截图只显示2个,另外一个函数是 序号6C,RAV 23A66,名称是 ?Nil@@3V?$ref_ptr@U__REF_PTR_NULL__@@@@B 我用你的MSkinCore.dll,又找来个msvcp60.dll,已经DUMP出来一个主程序了 加载时出错,错误报告位于MSkinCore.dll,看图。 请尽快想办法修复那个mskincore.dll,然后我来试试我dump出的主程序还有没有错误。现在先不敢发上来,呵呵。 |
|
[求助]对一系列问题的茫然,能否有人指点一二,关于delphi程序机器码注册无反应
Dede已经分析出来,00405058处这个函数应该是Delphi的库函数 System.@LStrCmp; 根据Delphi的调用习惯,两个参数是分别通过eax,edx来传递的。 按照贴出来的代码来看,这两处都是判断的位置,是两步。 也就是说,这个函数验证过程分两步,任何一步错了,都会失败。 先看你指出的第一处,把上面几行代码连起来看:
这是把 [ebp-$04]处的str变量剔除空白字符后,存放于[ebp+$FFFFFE74]处。 下面要比较的两个字串是放在EAX,EDX中的。从代码:
中我们看到,EDX是[ebp+$FFFFFE74]处的str变量,而EAX呢?再往上翻,看到:
所以,这个比较,比较的是[ebp+$FFFFFE7C]和[ebp+$FFFFFE74]这两个str变量。如果不相等,也就不进行第二步比较,直接跳到004EA098,把EBX清零,也就是失败。 再看第二个比较:
同样往上翻几行,找到push指令,看到 004EA046 8D853CFEFFFF lea eax, [ebp+$FFFFFE3C] 也就是说,是 [ebp+$FFFFFE3C]和 [ebp+$FFFFFE6C]处这两个str变量进行比较。 你下面的工作,就是被比较的这4个str分别是什么内容,通过什么算法来的。然后再逆推,应该用什么样的注册码才能使这两个比较都成功。如果爆破,就修改call后面的跳转,第一处nop,第二处jmp。 建议用IDA来处理,读起来更容易。这样直接用Dede的代码看得太累了。 |
|
[求助]MoleBox主程序脱壳,捆绑文件DUMP问题
这个我没仔细研究。 现在我发现,00af0000-00af1000这一段内存区域只含有一个PE的头和函数名字的字符串, 而00af1000-001f6000这段可能是一个完整的PE文件,但文件头是坏的,原程序似乎是解析从00af0000这一段中的PE头,然后将函数指针定位到00af1000这个内存区域上的代码的。 但0xaf1000开始的内存区域中PE头部是故意损坏的,现在我想把它DUMP出来,再把0Xaf0000上的PE头粘贴到它的前面。 结果还是不行,得到的文件仍然不是有效的PE格式,无法使用。 你说的121个函数,是不是已经DUMP出来了? 可以请教一下方法和思路吗? 谢谢。 fly那篇文章中的那个版本,程序是将捆绑的dll文件释放到临时目录,然后LoadLibrary(),GetProcAddress()来加载的。 而现在这个版本,捆绑的文件根本就不释放出来,直接在内存中解压,然后自行进行重定位,所以必须手动把它DUMP出来。之后才能想办法修复IAT。 |
|
[求助]对一系列问题的茫然,能否有人指点一二,关于delphi程序机器码注册无反应
如果只有这一个验证函数的话,直接让函数返回”成功“的标志即可。 看原来函数开头的部分 以及结尾部分的retn,你直接修改成这个“模样”,保持堆栈平衡即可: mov eax, 1 retn 这样这个函数就永远返回“成功”了。 这只是简单的情况。如果程序有其它的手段导致修改后不能正常运行,则还要具体情况具体分析。 |
|
[求助]od如何对付int3
选项->调试设置->异常,忽略以下异常:选中 "int3中断“ |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值