niestcheer 发表于 2022-4-20 00:53

摸爬滚打着学习破解之路--第三章 CRACKME160之三

# 摸爬滚打着学习破解之路--第三章CRACKME160之三
## 前言
上一章说去学习视频,真的去学习了。知道了个TLS这么个东西,但是你问我会不会用,哈哈,我现在只是知道就不错了,要用的时候再回去翻视频吧。现在脑子里记得还有个VEH,但是依旧完全想不起来是干啥的了。不动手是真的容易忘,所以练手之路继续。(可能我太高产了,前面三篇文章,本来已经审过了一篇的,18号编辑了一下,重新审。现在18号新写的一篇,19号写的一篇都还没过审,20号写的一篇都已经上传了。为自己的学习精神点赞。哈哈)
## 正题
今天依然继续冲着3\160的目标前进。冲啊!

---
## CRACKME 编号 3 破解之路
1. 破解第一步:运行程序,确定破解目标
    - 运行程序。哎呀,今天这个程序有点恶心人啊,运行以后出来个框框,然后不让动了,非要等一会才能出程序主界面。把弹窗和程序主界面都放下面:
   
    - 嗯嗯,今天的程序主界面很明确告诉你,让你干掉这个欢迎窗口,然后再找到用户名和密码。(如果我没理解错的话,找到用户名密码的意思是都内置好了?)
    - 不管了,先搞掉恶心人的欢迎界面吧。
2. 破解第二步:明确破解目标,确定破解思路
    - 现在的目标是干掉恶心人的欢迎界面。
    - 先按传统思维逻辑来,我一般喜欢在程序正好发生的地方,去跳过它。
    - 按照这个逻辑,我应该找到窗口生成的位置,然后要么跳过,要么NOp掉。
    - 好,开干!
3. 破解第三步:找到关键破解点,暴力开干
    - 新程序来了。我们得按照大大门总结的经验来,看看有没有壳。
   
    - OK!漂亮,依然没壳,依然是VB写的。
    - 程序拖进OD。今天程序进OD终于来了新变化了,出来个弹窗提示,如下图:
   
    - 说实话,我不知道这是什么意思,本来我看画眉老师的视频是说,有这个提示可能有壳,这不是查了没壳了么。所以不管了,点确定。
   
    - 好了,程序停在了进入点。这次的进入点有点意思,啥事不干,马上给你来个CALL。看不懂就不鸟它先。直接下断点,下的断点如下图:
   
    - 让程序运行起来,然后断下来。
   
    - 好吧。从这里开始,离上次断下来界面的时间已经过去了2个小时了。问题太多了,如果把截图都放上来。估计各位看客们要看上个把小时。所以我简单的介绍下我中间都干了些什么蠢事吧。
    - 第一个小时,我还是按照上面的思路找到了调用欢迎窗口的位置。位置在`740485D3`。这个位置我把截图发出来吧。
   
    - 大家看堆栈的位置,显示`Form1`。应该是欢迎窗口没错咯。所以我按照我原来的思路,干掉它做了什么尝试了,首先当然最简单的,直接NOP掉了。
    - 然后程序,叮,报错。
    - 好吧,不能NOP,我就想着要怎么跳过呢?跟进去然后直接返回吗?我现在知道我很傻,居然有了这样的想法,大家千万别去尝试,因为那个位置被无数地方调用,改了,也是直接程序崩溃。
    - 好吧,现实告诉我这么简单是搞不定的了。我就想为什么我NOP掉不行呢。就又调试了好几次,好几次,好几次,因为一直没有新的思路,所以再各种死磕。突然我发现CALL那句执行了以后,到后面一句的时候,有4个寄存器有了变化,EAX,ECX,EDX,ESP,所以我就又突发奇想,是不是改了代码,然后想办法把所有寄存器改变的地方都搞定,也能解决这个问题呢。
    - 然后我就进行了尝试,这个尝试首先又花了半个多小时,因为尝试了很多方法。一直没有成功,不知道有没有汇编大牛告诉我,这里到底能不能这么改来实现。
    - 再然后我实在解不开了,开始搜索资料想学习下别人的资料,看到了VB的4C大法,妈呀,真的简单。过程我就不复述了,论坛里多的是。
    - 正常情况我该放弃了。但是我又觉得不甘心,然后我干了什么。我又按照自己的思路去瞎搞,从`740485D3`这个位置跟了进去,然后看到里面还有一个CALL,如下图:
   
    - 我又开始不了不安分的想法,我就在想能不能在停在这个CALL的时候,我把EIP修改了,然后直接不执行CALL,走下一步去呢。
    - 这里我想问下各位大牛,为啥OD里面不能像改其他寄存器位置一样,直接修改EIP的位置。我很是惆怅,还好昨天说补画眉老师的视频,真的去补了,刚好看到OD的脚本编写,我就很白痴的写了个给EIP赋值的脚本,然后,欢迎界面就这么消失了。但是,也只是这一次消失了。后面每次都得OD打开,先断再我需要的位置,然后运行脚本。这样肯定不是解决了问题。
    - 到了这里,其实今天的破解是非常失败的,因为除了4C大法,能把程序破解了再重新保存成可执行文件。脚本的方式我还不知道怎么加判断,让它准确的在我需要修改的时候修改EIP。然后能在程序里面执行。请各位大大给点解决的学习途径。

#### 今天是尝到了苦涩的一天,虽然4C大法可行,但是自己的思路不行的时候,还是满满的遗憾。这里就留个难题,等再学习学习,看看能不能找到自己思路的解决办法把。
---

## 今天到此为止,剩下的验证部分,等下一章再继续了。现在脑子一团浆糊。

niestcheer 发表于 2022-4-20 21:06

美美木耶 发表于 2022-4-20 20:08
建议在详细一点

这一期不是成功的经验,我怕越详细,越把大家带坑里了,而且中间我走了太多弯路,我都不知道该怎么更详细了。我最终还是用的4C大法完成的去NAG,4C大法论坛里已经有了一堆了,再写有点累赘了。然后文章是我的一些思考。最后也是用简单的一句 MOV EIP,77D2AF85 和 ESTO 这么两句简单的脚本语言,在执行到最后找到的那个CALL的时候不执行它,直接走脚本。看看有没有大神能帮我确定下,我是运气好成功的,还是这个思路可行,但是我在哪些点有欠缺,所以有思路,最终不足以完成。{:1_909:}

niestcheer 发表于 2022-4-21 15:32

moshuiNW 发表于 2022-4-21 13:56
EIP指向代码段,也就说EIP指向的地址就是接下来执行的地址

EIP干什么的这个我知道了,所以,我修改了EIP的指向,跳过了那个弹NAG的CALL。这里就很尴尬的,我在OD里面不知道怎么在这个CALL的位置断下来的时候,像修改寄存器地址一样修改EIP。所以写了个极其简单的脚本来执行了EIP的修改。然后就是脚本我不知道怎么给打包到执行程序里。

bangbang0329 发表于 2022-4-20 15:40

谢谢分享。

tukuai88ya 发表于 2022-4-20 16:02

谢谢分享。

美美木耶 发表于 2022-4-20 20:08

建议在详细一点

NJSYDG 发表于 2022-4-21 12:40

moshuiNW 发表于 2022-4-21 13:56

EIP指向代码段,也就说EIP指向的地址就是接下来执行的地址

moshuiNW 发表于 2022-4-21 16:51

niestcheer 发表于 2022-4-21 15:32
EIP干什么的这个我知道了,所以,我修改了EIP的指向,跳过了那个弹NAG的CALL。这里就很尴尬的,我在OD里 ...

emmm,我们继续学习吧,我也不懂害..

xiaoyu2032 发表于 2022-4-21 22:29

楼主先搞清程序领空和系统领空的概念,不能跑到系统领空里面去改啊。。。
页: [1] 2
查看完整版本: 摸爬滚打着学习破解之路--第三章 CRACKME160之三