手脱 UltraProtect 1.x -> RISCO Software Inc
2009-11-12 11:15
337 查看
手脱 UltraProtect 1.x -> RISCO Software Inc.
用PEID 查壳
用OD 载入。。。
分析代码。。。。 不选非法访问内存!!!
可以用ESP定律来取得它的入口地址。。
当然首先应该看一下它是否被抽取了入口代码,将它们隐藏起来了。。
载入后后,可以对代码进行分析,用最后一次异常的方法来到那个 ret 然后打开内存镜像,在代码处内存访问断点,来到程序OEP,发现程序的OEP 被抽取了。。
那么我就来将抽取的OEP 找出来吧。。。
可以运用ESP 定律。。。因为 UltraProtect 1.x -> RISCO Software Inc.
用 fi 看是 1.4x 的,是一个高版本。。。所以不能像拖地版本那样,运行后来到
最后一次异常的 ret 后,在此处 用跟踪的方法 设置命令 push ebp 去搜索 程序
的入口地址。。当然,如果是 BC++ , 汇编的,这就根本不行了,,它们的入口比较特殊。。。
用ESP 定律,暂停后,用F9 继续走,知道拷到 push ebp.. 此时,你就要对程序入口的代码比较熟悉了。。。
通过比较,我们可以发现:
mov eax, dword ptr [4DE3C0]
shl eax, 2
mov dword ptr [4DE3C4], eax
这是 BC++ 的头。。。让我们将它进行二进制复制下来吧。。。
A1 C0 E3 4D 00 C1 E0 02 A3 C4 E3 4D 00
应为 BC++ 的头
机器码为
PUSH EDI ************** 57
PUSH ECX ************** 51
XOR EAX,EAX************ 33c0
这三个是固定的,它的汇编代码也是不变的。。。所以只要确定它们就可以:
MOV EDI,BC++.XXXXXXXX(当然这应该是具体的地址!!哈哈)
MOV ECX,BC++.YYYYYYYY
机器码:
****** BF XXXXXXXX
****** B9 YYYYYYYY
那个具体的地址怎么确定呢??
通过对汇编的分析,我们只要找到 cmp ecx,edi 就可以了。。应为通过数据窗口会出现:
edi=00501404 (epromm51.00501404)
ecx=01509890 (epromm51.01509890)
我们就能将地址捕获。。。。哈哈。。 那么我们怎么去捕获他们呢??
具体的,我们必须来到程序的OEP 从那寻找我们的答案。。。。
现在我们运用一种可以快速到达 OEP 的方法;
首先,重新载入程序,忽略所有异常(这招好酷哦!),打开内存镜像,在idata
处,下内存写入断点,shift+F9, 暂停后,再次打开堆栈。删除内存断点,
在 .text 处下内存访问断点 shift+F9运行(连续两次)。
就能来到程序 OEP 。。如果没有看到:
00401000 19 db 19
00401001 D6 db D6
00401002 28672701 dd epromm51.01276728
00401006 4B db 4B ; CHAR 'K'
00401007 56 db 56 ; CHAR 'V'
00401008 25 db 25 ; CHAR '%'
00401009 30 db 30 ; CHAR '0'
0040100A 5A db 5A ; CHAR 'Z'
0040100B 4D db 4D ; CHAR 'M'
0040100C 6F db 6F ; CHAR 'o'
0040100D 57 db 57 ; CHAR 'W'
0040100E 7A db 7A ; CHAR 'z'
0040100F E0 db E0
00401010 E0 db E0
00401011 35 db 35 ; CHAR '5'
00401012 7C db 7C ; CHAR '|'
00401013 49 db 49 ; CHAR 'I'
00401014 02 db 02
00401015 6E db 6E ; CHAR 'n'
00401016 40 db 40 ; CHAR [email='@']'@'[/email]
00401017 0B db 0B
00401018 CE db CE
00401019 A1 db A1
0040101A . 16 push ss
0040101B . 3BCF cmp ecx, edi //重点在这呀!当程序运行到它
一切就搞定了。。
0040101D . 76 05 jbe short 00401024
这个,那你就对代码进行分析一下,你就会发现了。。。哈哈,好慢呀!!
数据框出现:
edi=00501404 (epromm51.00501404)
ecx=01509890 (epromm51.01509890)
现在一切工作的差不多了,将它们的二进制代码弄出来粘上去就完成的讲抽取的
OEP 给弄回来了,只要在重建一下 EIP 就行了。。。
这还有一个要注意的地方就是在 组建二进制数据时,注意低位与高位数据的安排顺序,很重要,不然就会出错。。同一命令从左向右,当是多字节例如 BF 00501404
就应该将为 BF 04145000。 其他类似。。
A1 C0 E3 4D 00 C1 E0 02 A3 C4 E3 4D 00 57 51 33 C0 BF 04 14 50 00 B9 90
98 50 01
以下是BC++ 程序代码的头:
00401000 > $ A1 A8534B00 MOV EAX,DWORD PTR DS:[4B53A8]
00401005 . C1E0 02 SHL EAX,2
00401008 . A3 AC534B00 MOV DWORD PTR DS:[4B53AC],EAX
0040100D . 57 PUSH EDI
0040100E . 51 PUSH ECX
0040100F . 33C0 XOR EAX,EAX
00401011 . BF 88DA4C00 MOV EDI,BC++.004CDA88
00401016 . B9 C0358D00 MOV ECX,BC++.008D35C0
0040101B . 3BCF CMP ECX,EDI
0040101D . 76 05 JBE SHORT BC++.00401024
用PEID 查壳
用OD 载入。。。
分析代码。。。。 不选非法访问内存!!!
可以用ESP定律来取得它的入口地址。。
当然首先应该看一下它是否被抽取了入口代码,将它们隐藏起来了。。
载入后后,可以对代码进行分析,用最后一次异常的方法来到那个 ret 然后打开内存镜像,在代码处内存访问断点,来到程序OEP,发现程序的OEP 被抽取了。。
那么我就来将抽取的OEP 找出来吧。。。
可以运用ESP 定律。。。因为 UltraProtect 1.x -> RISCO Software Inc.
用 fi 看是 1.4x 的,是一个高版本。。。所以不能像拖地版本那样,运行后来到
最后一次异常的 ret 后,在此处 用跟踪的方法 设置命令 push ebp 去搜索 程序
的入口地址。。当然,如果是 BC++ , 汇编的,这就根本不行了,,它们的入口比较特殊。。。
用ESP 定律,暂停后,用F9 继续走,知道拷到 push ebp.. 此时,你就要对程序入口的代码比较熟悉了。。。
通过比较,我们可以发现:
mov eax, dword ptr [4DE3C0]
shl eax, 2
mov dword ptr [4DE3C4], eax
这是 BC++ 的头。。。让我们将它进行二进制复制下来吧。。。
A1 C0 E3 4D 00 C1 E0 02 A3 C4 E3 4D 00
应为 BC++ 的头
机器码为
PUSH EDI ************** 57
PUSH ECX ************** 51
XOR EAX,EAX************ 33c0
这三个是固定的,它的汇编代码也是不变的。。。所以只要确定它们就可以:
MOV EDI,BC++.XXXXXXXX(当然这应该是具体的地址!!哈哈)
MOV ECX,BC++.YYYYYYYY
机器码:
****** BF XXXXXXXX
****** B9 YYYYYYYY
那个具体的地址怎么确定呢??
通过对汇编的分析,我们只要找到 cmp ecx,edi 就可以了。。应为通过数据窗口会出现:
edi=00501404 (epromm51.00501404)
ecx=01509890 (epromm51.01509890)
我们就能将地址捕获。。。。哈哈。。 那么我们怎么去捕获他们呢??
具体的,我们必须来到程序的OEP 从那寻找我们的答案。。。。
现在我们运用一种可以快速到达 OEP 的方法;
首先,重新载入程序,忽略所有异常(这招好酷哦!),打开内存镜像,在idata
处,下内存写入断点,shift+F9, 暂停后,再次打开堆栈。删除内存断点,
在 .text 处下内存访问断点 shift+F9运行(连续两次)。
就能来到程序 OEP 。。如果没有看到:
00401000 19 db 19
00401001 D6 db D6
00401002 28672701 dd epromm51.01276728
00401006 4B db 4B ; CHAR 'K'
00401007 56 db 56 ; CHAR 'V'
00401008 25 db 25 ; CHAR '%'
00401009 30 db 30 ; CHAR '0'
0040100A 5A db 5A ; CHAR 'Z'
0040100B 4D db 4D ; CHAR 'M'
0040100C 6F db 6F ; CHAR 'o'
0040100D 57 db 57 ; CHAR 'W'
0040100E 7A db 7A ; CHAR 'z'
0040100F E0 db E0
00401010 E0 db E0
00401011 35 db 35 ; CHAR '5'
00401012 7C db 7C ; CHAR '|'
00401013 49 db 49 ; CHAR 'I'
00401014 02 db 02
00401015 6E db 6E ; CHAR 'n'
00401016 40 db 40 ; CHAR [email='@']'@'[/email]
00401017 0B db 0B
00401018 CE db CE
00401019 A1 db A1
0040101A . 16 push ss
0040101B . 3BCF cmp ecx, edi //重点在这呀!当程序运行到它
一切就搞定了。。
0040101D . 76 05 jbe short 00401024
这个,那你就对代码进行分析一下,你就会发现了。。。哈哈,好慢呀!!
数据框出现:
edi=00501404 (epromm51.00501404)
ecx=01509890 (epromm51.01509890)
现在一切工作的差不多了,将它们的二进制代码弄出来粘上去就完成的讲抽取的
OEP 给弄回来了,只要在重建一下 EIP 就行了。。。
这还有一个要注意的地方就是在 组建二进制数据时,注意低位与高位数据的安排顺序,很重要,不然就会出错。。同一命令从左向右,当是多字节例如 BF 00501404
就应该将为 BF 04145000。 其他类似。。
A1 C0 E3 4D 00 C1 E0 02 A3 C4 E3 4D 00 57 51 33 C0 BF 04 14 50 00 B9 90
98 50 01
以下是BC++ 程序代码的头:
00401000 > $ A1 A8534B00 MOV EAX,DWORD PTR DS:[4B53A8]
00401005 . C1E0 02 SHL EAX,2
00401008 . A3 AC534B00 MOV DWORD PTR DS:[4B53AC],EAX
0040100D . 57 PUSH EDI
0040100E . 51 PUSH ECX
0040100F . 33C0 XOR EAX,EAX
00401011 . BF 88DA4C00 MOV EDI,BC++.004CDA88
00401016 . B9 C0358D00 MOV ECX,BC++.008D35C0
0040101B . 3BCF CMP ECX,EDI
0040101D . 76 05 JBE SHORT BC++.00401024
相关文章推荐
- 脱UltraProtect 1.x -> RISCO Software Inc.时,遇到修复时提示无法读取进程内存的错误,应如何解决?方法和软件提供如下:
- eclipse安装插件时找不到help->software update->find and install怎么办?
- Lucene.Net ultra fast search for MVC or WebForms site => made easy!
- ACProtect 1.40 - 1.41 - RISCO Software Inc. 脱壳
- eclipse help>install new software总是安装到一半就失败
- 拷贝文件:linux--〉windows-->linux,丢失文件权限解决方法
- <<The C Programming Language>>学习之路-练习题参考答案 1-11
- shell 1>&2 2>&1 &>filename重定向的含义和区别
- struts2 <s:textfield> value属性默认值问题
- <Android> Android之Adapter用法总结
- Oracle - SQL 优化 -------- > SET AUTOTRACE 中Statistics(统计信息)说明
- Comparator<T> explaination
- 聚类分简单来讲:有监督 -> 分类(…
- 转载&gt;《OSWorkFlow》代码结构
- Error Log: type parameters of <T>T cannot be determined; no unique maximal instance exists for ...
- 近期接sdk的一点小总结1->AndroidManifest.xml各部分的作用
- 国际化标签 <fmt:bundle>&<fmt:message>的使用
- play framework2学习之旅<2.3>Manipulating the response
- JSP中<base href="<%=basePath%>">作用
- 怎么控制媒体播放(<audio><video>)