科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道系统安全之不脱壳直接破解软件的方法

系统安全之不脱壳直接破解软件的方法

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

补丁完成后的返回NOPNOP再在OllyDbg中下面的代码区的全0区域的任意位置输入上述汇编代码,然后复制出对应的汇编机器码备用。做好上述准备工作后,你就可以使用任一编程软件来编写你的补丁用程序了。

作者:赛迪网 来源:赛迪网安全社区 2007年10月18日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

再在OllyDbg中下面的代码区的全0区域的任意位置输入上述汇编代码,然后复制出对应的汇编机器码备用。在返回到偏移006083B0处,将JNZ SHORT LsDown.006083BA改为形如JMP 0060A310(你选定的位置),复制出机器码备用。到此,模拟补丁代码获取工作完成。

编写补丁程序

众所周知,反汇编后的代码位置的偏移与软件经过编译后的物理偏移是不一样的,要在壳外植入补丁需要取得对应位置的物理偏移。我们这里需要两处物理偏移,一处是对应于JNZ SHORT LsDown.006083BA的,一处是补丁部分的起始位置,这就要借助于文本编辑器进行。

用UltraEdit(或其它文本编辑器)打开前面保存的修改过的更名文件,使用查找功能查找hex:75 08 B8 01(对应于JNZ SHORT LsDown.006083BA)。得到首地址为:000935B0h,记下备用,然后拉到文件的最后,查找添加的代码位置(对应RETN),得到首地址为:00095510h(视你选择的位置不同而不同),记下备用,至此全部准备工作完成。

做好上述准备工作后,你就可以使用任一编程软件来编写你的补丁用程序了。

请注意我们所要做的工作:修改006083B0处的跳转;植入动态补丁代码和设置返回跳转,其余还应该考虑版本检测、原文件备份、提示帮助等问题。以下是我用 VB 编写的主要部分代码:

Open Fname For Binary As fhandle
'再次检验
'=============================================
'寻找软件版本的关键标志 
'VB中Get命令读数据指针从1开始,注意与hex编辑器中的地址
'的区别。即 偏移+1。
Get fhandle, &H935B0, data1 '为保险读取四个字节,也可多读
Get fhandle, &H935B1, data2
Get fhandle, &H935B2, data3
Get fhandle, &H935B3, data4
'=============================================
If (data1 <> &H61) And (data2 <> &H75) And (data3 <> &H8) _
And (data4 <> &HB8) Then MsgBox "请核对软件版本!", _
vbCritical + vbOKOnly, "文件错误:": Close fhandle: Exit Sub
&apos;修改全部要补丁的数据
&apos;==========================
&apos;壳的出口部分的修改
Put fhandle, &H935B1, &HE9
Put fhandle, &H935B2, &H5B
Put fhandle, &H935B3, &H1F
Put fhandle, &H935B4, &H0
Put fhandle, &H935B5, &H0
Put fhandle, &H935B6, &H90
Put fhandle, &H935B7, &H90
&apos;增加动态修改用代码
Put fhandle, &H95511, &H66
Put fhandle, &H95512, &H36
Put fhandle, &H95513, &HC7
Put fhandle, &H95514, &H5
Put fhandle, &H95515, &HFA
Put fhandle, &H95516, &H31
Put fhandle, &H95517, &H51
Put fhandle, &H95518, &H0
Put fhandle, &H95519, &HB0
Put fhandle, &H9551A, &H1
Put fhandle, &H9551B, &HC6
Put fhandle, &H9551C, &H5
Put fhandle, &H9551D, &HFC
Put fhandle, &H9551E, &H31
Put fhandle, &H9551F, &H51
Put fhandle, &H95520, &H0
Put fhandle, &H95521, &H90
Put fhandle, &H95522, &HC6
Put fhandle, &H95523, &H5
Put fhandle, &H95524, &H1E
Put fhandle, &H95525, &H32
Put fhandle, &H95526, &H52
Put fhandle, &H95527, &H0
Put fhandle, &H95528, &H74
Put fhandle, &H95529, &HC6
Put fhandle, &H9552A, &H5
Put fhandle, &H9552B, &H89
Put fhandle, &H9552C, &H3C
Put fhandle, &H9552D, &H53
Put fhandle, &H9552E, &H0
Put fhandle, &H9552F, &H75
Put fhandle, &H95530, &HE9
Put fhandle, &H95531, &H86
Put fhandle, &H95532, &HE0
Put fhandle, &H95533, &HFF
Put fhandle, &H95534, &HFF
Put fhandle, &H95535, &H90
Put fhandle, &H95536, &H90
Put fhandle, &H95537, &H90
&apos;完成写入,关闭它
Close fhandle

Icefire:细心的读者可能注意到,这两段代码中所使用的首地址比我们记录的首地址多1,这是因为VB的最小指针单位是1而不是0,而文本编辑器等的最小指针单位是0,所以在不同编程平台上编程时要多加注意。

编好补丁代码后,将其编译为可执行程序,然后试试你的东西,看能否将带壳的软件打补丁而且正常工作!如果一切正常,那你就大功告成了。

后记

有时,你可能想到要别出心裁的在软件中添加点属于自己有个性的东西,比如警示框等等。那也不难,只要你知道弹出对话框需要什么条件、用到哪些代码就可以做到的。例如:现在我想在软件启动前弹出一个对话框。

我们该如何做呢?这个问题当然要难一点。如果壳外有现成的对话框调用函数,就可以简单地进行调用。如果没有则需要添加较多的代码,这里就不讲了,免得有骗稿费之嫌。

总之,编写补丁如同编写一个软件,同样能实现自己的目的与愿望,展示自己的才华与智慧。个中乐趣只有亲自品尝之。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章