汇编基础知识

image-20200603171646834

平常好像也不会在意EAX~RDX的用处,记一下总没有错

image-20200603174144128

符号标志位以及标志位判断

image-20200603175753414

脱壳篇

见下一篇

按钮事件

前三个都是右键查找->二进制字串,VC++查找->命令

BC++&Delphi

1
74 0E 8B D3 8B 83 ?? ?? ?? ?? FF 93 ?? ?? ?? ??

VB

1
81 6C 24

易语言

PEID分辨的时候会显示为VC6程序,所以进去先搜索FF 25看是不是易语言写的

1
FF 55 FC 5F 5E

VC++

1
sub eax, 0a

初级破解

跳过登录

查找相关字符串,将跳到False的条件NOP,右键Nop的地方,复制到可执行文件->选择,在新窗口右键,保存到文件,重新打开发现直接success

获取注册码

查找相关字符串

image-20200604013329768

image-20200604013430933

找到关键Call(用来判断是否正确),下断点,F7步进,之后慢慢找到注册码

image-20200604013813735

跳转破解

image-20200604014359040

利用密码不对往上面找,看到上面一行的向右,点一下根据连线找到跳转语句,打断点

image-20200604014533528

运行发现就是这的原因,空格改变汇编语句

image-20200604014719572

更改为jmp(原来是je的条件跳转),结束。

修改关键CALL的返回值

是一个注册软件

image-20200604015345112

搜索感谢注册等字样,找到语句,并且找到包围它的跳转(跳false的条件)

image-20200604020058819

是根据CoolVide.xxxx函数的返回值判断的,在Call语句下断点运行,随便输一下,断住

image-20200604020244856

F7步入,将第一行修改

image-20200604020347046

第二行改为retn

image-20200604020414668

右键,复制到可执行文件->所有修改,全部复制,保存

重新打开,发现注册按钮变灰(注册成功)

万能断点

也是注册软件,我们利用它来追下注册码

用Ollydbg运行,随便输入注册,软件退出后右键

image-20200604021301435

选择user32

右键查找二进制字串,输入万能断点

1
F3 A5 8B C8 83 E1 03 F3 A4 E8

查找后对应语句下断点,OD重新运行,由于万能断点,中途会暂停多次,一直到我们随便输入再点击确认按钮

image-20200604021710257

然后开始步过,直到堆区出现注册码。(好傻。。。)

删除弹窗

image-20200604022207337

OD运行,让他出现弹窗,点击暂停,从工具栏中的K进入堆栈视图

image-20200604022342683

找到MessageBoxExa,右键选择显示调用

image-20200604022426710

F2打断点,重新运行到断点处

image-20200604022633872

步过一次,出现弹窗image-20200604022701616

点击“是”,右键查看Call的调用树,搜索call 4641B8

image-20200604024033280

找到上层函数,发现jnz关键语句,空格改为jmp

image-20200604024102367

老套路保存。之后无弹窗。

通过查找字符串,寻找注册码

image-20200604093311029

右键中文搜索引擎->智能搜索到不正确里面,找到关键跳转

image-20200604093440112

Nop填充,保存,破解完成

image-20200604093628326

在字符串中发现密码文件(好傻。。。)

BC++脱壳后的修复(寻找IAT Import Address Table)

同样是注册软件,单步步过,用rsp定律脱

image-20200604094032170

右键HW break,继续运行

image-20200604094116497

步过到OEP,dump

image-20200604094156727

image-20200604094220294

用LoadPE软件,找到进程,选择纠正镜像大小,再完全脱壳

image-20200604094436848

但是这里会得到一个不能打开的软件,因为IAT,引入函数位置不对

image-20200604095624176

打开Import REC软件,找到进程,OEP输入入口(14E0)

image-20200604094932559

OD重新运行到入口,在第一个CALL步入,往上找到段首(retn后面),右键在数据窗口中跟随内存地址

image-20200604095054798

内存窗口中右键选择长型->地址

image-20200604100009825

由内存映像中基址为00400000,可知偏移为16E114

打开REC软件,再打开原始软件,OEP填入入口,RVA填入偏移量,获取导入表

右键使用删除指针把无效的删除

image-20200604095922482

点击修正转储

image-20200604100117020

选择脱壳软件保存,重新运行一下

脱壳且正常运行

利用dede软件查找deiphi

还是注册,右键发送到dede,一直yes,到过程页面

image-20200604101022002

之后跟之前类似了,把验证错误的分支NOP再重打包

ALT F9关键CALL追注册码

image-20200604102129294

无壳,发送到OD运行到注册失败

回到OD点击暂停,菜单栏调试->执行到用户代码

然后回到软件点击确定,发现OD跳转并且暂停了

image-20200604102344874

往上找,发现了包围唤起弹窗的两个跳转,打断点,但是都不停止,继续往上找,能找到一个比较大的跳转

image-20200604103032699

在关键CALL打断点,步入,步过找注册码