|
OD使用的基础问题,关于“跳转来自”
楼主,这问题很重要吗?VC6.0和VS2008中间差距近10年,都是上层语言当然不一样的处理。 VS2008在转换成汇编语言方面进步在于:考虑的多些(代码更长),代码自动优化(消灭了一些编程小技巧)。 也不是很了解,揣测下: 第一个图是代码段最前面,401000-401010之间有个短跳转语句(0h--FFh范围),OD很好识别就说明了下。 第二个图是个长跳转?更可能他就是个调用,那当然没跳转提示了。 楼主基本功貌似不扎实啊,你截图的内容不足以提供给别人好好分析。 |
|
如何把多个文件封装成一个exe文件,双击exe文件可以运行某个文件。
额,据说很简单,同事做过,说是测试和安装常用。不过我不会,掩面而逃。 |
|
dotnet程序,脱壳以后无法重新编译运行,已经自己搞定了。。。
搂主不厚道,我如果自己搞定的话,肯定不删除一楼,会在后面简单附上自己是如何解决这个问题的。不会又不丢人,何况是在网络上发的,再说别人就会吗。哎,不淡定了。 |
|
我想做个壳当毕业设计,大家有什么好的建议么?欢迎指点指点我
额,我的毕业设计室个压缩壳;因为工作,改进了几个月后成了个保护壳。 楼主大三的话,不要想做一个 大部分PE文件都能正确的加保护壳 ,这样要解决的问题挺多的。这个问题可以最后解决,很牵扯精力的。 你试试吧,一点一点做起,一个功能一个功能做起。除非你很刻苦啦,不然根据我的经验: 如果你用半年的所有课外时间(不算考试前的复习),只能做个比论坛上的保护壳强不了多少的壳,被破不需要一刻钟。 再花半年的课外时间(不包括暑假),被破需要30分钟算及格。 壳被脱能坚持30分钟以上那你真学到东西了,算是人才了,找工作很容易。 没有瞧不起楼主的意思,只是大学生的时间看起来很多,但是用来学习是相当不够的。 先把汇编和简单的编译原理弄清楚再上手吧,楼主大三就想做这样的毕业设计,非常佩服,致敬! |
|
|
|
64位的PE文件怎么修改?
你想用软件的方式打补丁,现在没有这样的软件吧。 现在连64位的加壳软件都非常非常少,不到32位加壳软件的1% 64位打补丁,如果你对32位PE文件结构很了解的话,稍微看下64位,你搞个只解决你自己软件补丁问题应该很好做到,想找软件几乎不可能。 |
|
新人不懂,请高手帮忙
这种贴很多啊,我也是新人,大家讨论下。 因为你开始时能正常加载OD的,据此肯定没有使用TLS技术,估计软件没有被加壳。 应该是 点“确定”后的执行代码里有 反调试 这个方法。你把OD的各种插件找全点的话应该就能搞定。 如果还不能搞定,分两种情况: 1)程序直接退出,那你在输入表里找 ExitProcess 这个函数,在所有调用这个函数的地方看一下,比较容易找到阻碍你调试的代码。 2)程序出现假死状态。那就比较狡猾点了,或者说软件开发者用 死循环 对付破解者。这个就需要经验来搞定了,爱莫能助。 |
|
菜鸟求助汇编问题
把寄存器esi里的值当做地址,取其4个字节长度的数值,赋值给eax |
|
[求助]程序被OD载入之前执行了什么
晕,大家没看 《加密与解密 第三版》吗。第十章专门有一节讲了TLS本地回调函数。 如果我写壳实现楼主所说的功能,那么我肯定运用TLS技术。 没写过,身边没有书,只有一点了解,简单说下: 就是PE文件头中的映像文件头中 数据目录项 有个TLS表,前4个字节是RVA,后面4个字节是大小(好像都是固定的18h大小)。 让该TLS的RVA指向你的回调函数首地址的RVA。你的回调地址函数首地址向下执行下去 就是 你写的Anti_Debug功能函数(这个系列函数应该写在明文的壳代码中)。 |
|
|
|
shellcode里除了用ShellExecute和WinExec还有什么办法运行程序?
泪奔,写了半年的加壳软件, shellcode里除了用ShellExecute和WinExec还有什么办法运行程序?从来没想过有这个问题。 LZ,你是在写加壳软件这样的东西吗?是不是类似ASP这样的软件。 |
|
汇编代码长度问题
004010A1 |? 68 A1000000 push 0A1 invoke函数在处理标号作为参数的时候有点小问题 学习了,还有这种问题啊。当初我看到你的代码 CodeLength = CodeEnd - CodeStart 时,感觉挺别扭的。建议你以后用用 CodeLength DD (CodeEnd - CodeStart) 这种方式。 |
|
汇编代码长度问题
那无奈了,只能看下宏汇编代码,然后人工翻译成OD那种代码,然后跟OD里比较下跟你想的有没有大的出入。 另,汇编代码起始入口处和CodeStart标记是否一致呢,如果不一致,那么这个问题我这样也能解释的通。 |
|
汇编代码长度问题
1997 byte 即地址00401685处的DWORD值000007CD的十进制数值。 由此可见 实际生成的代码量 为 683H 1667byte。你已经说了,代码量为683h. 但是为什么实际值是7CD呢。因为楼主的CodeStart equ this byte和CodeEnd equ this byte编译器认为不在同一个区块。如果不是这个原因,请看下面在同一个区块的情况: 楼主定义那一群_PeekNamedPipe dd ?和szWSAStartup db 'WSAStartup',0 这种东西编译到哪里去了。如果楼主这段汇编代码起始入口在CodeStart equ this byte处的话,就是楼主所说的683h。但是显然,楼主不是这样的,那么楼主那一大群定义就被你算漏了;但是编译器是按编译时的相对位置计算的,所以它计算进了那一大群定义的大小。 所以,是汇编代码起始入口处和CodeStart标记不一致的原因。 如果楼主那一大群定义在内存中的存储位置不在401000与00401683之间,那么说明就是这个原因,楼主你验证下哈。 楼下的说法,我感觉哈,应该是没影响的。我使用过和楼主很类似的汇编代码,能得到准确值的。 |
|
汇编代码长度问题
据我猜测,问题出在 编译器如何解释CodeStart equ this byte和CodeEnd equ this byte 以上2个属于宏汇编,建议用OD看下这里会变成什么汇编代码 还有CodeLength = CodeEnd - CodeStart这样的代码那个等于号是相当于直接赋值语句? 另,楼主 CodeEnd equ this byte 两行代码之间添加一个 DB 0 看看, 不知道是不是标识的问题。 楼主用OD把编译后的汇编执行代码列出来看看,毕竟大家直接做你这个的比较少。 |
|
如何根据函数地址获取函数名?
如果知道该函数所在DLL的加载基地址。 那么可以看看以下一种通用但是未必高效的办法 那么汇编代码方式实现如下描述: 把该加载基地址看做PE文件的基地址,经过一系列PE文件结构指针的运算,找到输出表。 用该DLL所有函数名字的指针依次做参数,加上该DLL的加载基地址,通过调用GetProcAddress函数得到 所有函数依次的地址。 用这个地址与我们已知的那一个函数地址比较,相等的话,把参数二(这是个指针)取出。 通过指针可以找到该函数名字的字符串,就达到了目的。 楼主如果能比较熟练写出汇编代码并有一定的PE结构知识,那么可以自己写。如果感觉能力不足,可以搜索下相关代码,论坛里这样的汇编代码我记得是有几个的。 PS:楼上贴的很快啊。 |
|
汇编代码长度问题
我用的也是MASM32(严格限制的MASM32,楼主这种代码编译通不过)。 对于这个问题我用过3种方法。 方法一: lea eax, offset CodeEnd lea ebx, offset CodeStart sub ebx,eax mov CodeLength,ebx 方法二: 程序开始处 CodeStart DD 0 ;也可以把这个标记为代码的起始处,这个更符合楼主的情况,见后面说明。 程序末尾处 CodeEnd DD 0 ;也可以把这个标记为代码的末尾处,这个更符合楼主的情况。 定义一个变量 CodeLengthADDR DD CodeEnd-CodeStart mov CodeLength , dword ptr[CodeLengthADDR] 说明下,即为: CodeStart equ this byte 改写为 CodeStart: pop eax 方法三: 程序CodeStart处有 call CodeEnd CodeEnd: pop eax mov ebx, dword ptr[eax-4] mov CodeLength ,ebx jmp eax 注意:如果CodeEnd和CodeStart之间间距小于0FFh,请使用类似以下代码 程序CodeStart处有 call CodeEnd CodeEnd: pop eax mov bl, byte ptr[eax-1] mov CodeLength ,bl ;如果这里操作数出错,请你先把bl扩展为ebx(指令我忘记了) jmp eax ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 推荐第二种方法。以上几种方法改变了寄存器的值,楼主需不需要保存该寄存器的值,自己改下哈。 说实话,都一天了,楼主都没有想出以上任意一种方法吗?汗一个。 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值