首页
课程
问答
CTF
社区
招聘
看雪峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
看雪峰会
看雪商城
证书查询
社区
付费问答
发新帖
0
0
[旧帖]
[讨论] 一个算法分析的实例。
0.00雪花
发表于: 2012-1-14 14:14
1455
[旧帖]
[讨论] 一个算法分析的实例。
0.00雪花
purpleroc
6
2012-1-14 14:14
1455
在先前的
【讨论】cfg文件中的加密算法问题。求探讨!!!
帖子中有提到过这个。也有高手追踪到了算法,但是,他不告诉大家,于是,就自己来倒弄了。因为听过一句话,技术,藏着掖着就变臭了。所以,希望各位高手们,千万不要吝啬哦。也带带我们这些菜鸟吧。
首先,咱们得安装一下这个最新版本的涉外上网助手1.2.9。
下载地址
安装好之后,我们用Peid查壳,看到是用aspack的压缩壳进行加壳的,至于加壳有什么作用,壳是干嘛用的,大家自己去百度吧。
既然有壳,那我们就先脱壳吧,对于upx以及aspack的壳我们一般都可以用esp定律以及内存断点法来进行快速脱壳,或者,如果大家不嫌麻烦的话,可以试试单步跟踪的方法来试试。多练练总是好的。
那么我们开始吧。这里我用的是esp定律法。(至于什么是ESP定律,大家还是去百度吧)
OD载入之后
F8单步到第一次ESP变化的值再下硬件访问断点,
然后F9运行。来到这
再次F8我们就来到OEP了,也就是程序的真是地址了。于是,我们就可以脱壳了。我们就用自带的ollydump脱壳调试进程来进行脱壳吧。之后,我们来运行一下脱完壳的程序,OK,可以运行。我们再来查一下壳
可以看到,源程序是用VC++ 6.0写的。
当然,大家可能会问,为什么要脱壳?脱壳有什么作用呢?在这里,我向大家推荐一款工具,用来更改一些软件的,比如reshack(资源黑客)、pexplorer等资源修改程序,当我们把带壳的程序和不带壳的程序进行对比的时候,可以明显的感觉到壳的作用。加壳的程序是查看不了程序所有的窗体、图片等资源的。而未加壳的,则没有限制。当然,如果是想aspack等的压缩壳,我们还可通过文件大小的对比来找到他们的区别,从而也可以知道壳的作用。
好,既然脱壳了,之后我们要干嘛呢?对于一些初级的朋友来说,我们脱壳之后就可以改窗体名称了,改图片等资源来实现程序的个性化了(用Reshack等资源修改工具)。
但我们今天主要是想来追踪一下这个拨号端和pppoe.cfg的秘密。也就追踪他的算法,他是如何从pppoe.cfg中得到我们输入的账号以及密码的。他又是如何对我们输入的账号密码,进行加密保存的。(虽然在网上求助得到了高手的答复,知道了是3DES不规则加密的,也得到了解密的代码,但还是想自己追踪一下这个算法)
首先,我们知道有pppoe.cfg这个文件,而且也知道在客户端拨号的时候会对这个文件进行访问,那么,我们的思路也就随之而来了。
用OD载入,然后设置忽略所有异常,再按shift+F9,发现还是停下来了,看了下是000006D9异常,我们就忽略它吧。之后,用OD重新加载程序,下文件访问断点:bp CreateFileA 之后shift+F9进行忽略所有异常运行。这是我们要注意观察堆栈窗口,我们可以发现这个程序读取了哪些文件,当我们看到pppoe.cfg的时候,取消硬件断点,并且ALT+F9返回。
来到这里:
0042341B 83F8 FF cmp eax,-1
0042341E 75 28 jnz short 1.00423448
00423420 8B75 10 mov esi,dword ptr ss:[ebp+10]
为了方便下次进入,我们记下这个首地址,或者下断点。
同时我们也要观察一下pppoe.cfg中到底是是东西,别等下已经读取了我们还不知道,用winhex打开这个配置文件,把内容复制出来。
我输入的账户是:Tracy 密码:111111 文件里是这些东西(16进制查看):
DCA6662BEEAFD8A77F9509AE0DBA11C034736EEACF4AD4BA5F90D07602F766C33F0D793AB86754
接着,F8单步走。
这个时候,我们要注意观察所有窗口了。
执行到
00402911 8BCA mov ecx,edx
时出现字符串Trac到
0040291B 8B50 FC mov edx,dword ptr ds:[eax-4]
时出现了完整的Tracy 同时,我们观察下载堆栈窗口中已经出现了我输入的用户名已经密码的明文了。也就是说,在0040291B这个偏移地址以前,程序就已经加载好了文件并且算出了账户密码。所以,我们再来一次,这次的范围可以缩小很多了。
继续上面的操作,按下五次Shift+F9,然后Alt+F9返回。再继续刚才的操作
第一个call:
00423266 E8 BCFAFFFF call 1.00422D27
0042326B 8B4D F4 mov ecx,dword ptr ss:[ebp-C]
出来之后,发现,没什么作用于是,下次可以忽略这个CALL
一直跟进,来到这个地方
00402852 E8 DD0D0200 call 1.00423634
F8下去,来到这里
0042363F FF50 28 call dword ptr ds:[eax+28] ; 1.004234DC
继续跟进
看到了
004234EA FF15 10024300 call dword ptr ds:[<&kernel32.SetF>
; kernel32.SetFilePointer
看到这个.SetFilePointer,大家应该要引起重视了。
注:VC声明
DWORD SetFilePointer(
HANDLE hFile, // 文件句柄
LONG lDistanceToMove, // 偏移量(低位)
PLONG lpDistanceToMoveHigh, // 偏移量(高位)
DWORD dwMoveMethod // 基准位置FILE_BEGIN:文件开始位置 FILE_CURRENT:文件当前位置 FILE_END:文件结束位置
说明:移动一个打开文件的指针
再跟进去
我们发现。堆栈中的值:
0012DC90 004234F0 ?B. CALL 到 SetFilePointer 来自 1.004234EA
0012DC94 00000084 ?.. |hFile = 00000084 (window)
0012DC98 00000000 .... |OffsetLo = 0
0012DC9C 00000000 .... |pOffsetHi = NULL
0012DCA0 00000001 ... \Origin = FILE_CURRENT
于是,我们下意识的知道,程序开始读取文件了。
结果发现,跟了一圈,还是没作用……/pz,下次又可以过掉这里了。
好吧,那我们继续下一个call。(破解,是需要耐心了,我这么安慰自己)
0042364C FF50 28 call dword ptr ds:[eax+28] ; 1.004234DC
当我们第二次遇到
004234EA FF15 10024300 call dword ptr ds:[<&kernel32.SetFilePointer>] ;
的时候,大家都犹豫了,没办法,跟进去吧,看有什么不同。然后,我们发现了一个很大的跳转,跳到了这里:(这是第一次没有的)
7C810C93 13C7 adc eax,edi
但是,还是没有作用。。。继续……
又发现一个Call。。。
00423658 FF50 28 call dword ptr ds:[eax+28] ; 1.004234DC
我们还是先都F8过掉吧。来到了这里
00402893 E8 58100000 call 1.004038F0
咱们先不跟进去,用F7,过了之后发现堆栈中出现了用户名和密码。那我们可以确定,这个是关键跳转。以后,我们再过来的时候,可以直接把前面的全部过掉。好,咱们现在跟进去。
之后,看到了这个。
0040392E E8 9D000000 call 1.004039D0
跟进去,来到这里再F7跟进去
得到了第一段算法。虽然不知道是干嘛用的,但是还是记一下吧。这个call 1.004039D0里面的算法是这样的:
00403DA5 8BD0 mov edx,eax
00403DA7 8AC8 mov cl,al
00403DA9 C1FA 03 sar edx,3 //EDX向右移3位,移出的最低位放到cf中。
00403DAC 80E1 07 and cl,7 //cl与上7
00403DAF 8A143A mov dl,byte ptr ds:[edx+edi] //0herolibamtium0中的位数进行操作
00403DB2 D2FA sar dl,cl //将EDX中向右移ECX位
00403DB4 80E2 01 and dl,1 //EDX与上1
00403DB7 881428 mov byte ptr ds:[eax+ebp],dl
00403DBA 40 inc eax // eax加1
00403DBB 3BC6 cmp eax,esi //如果减数大于被减数,此时有借位。则将cf位置1,否则置0.
00403DBD ^ 7C E6 jl short 1.00403DA5 //当cf为0的时候不跳转
从这个循环看。随着EAX的增加 EDX慢慢的增加。当eax大于40的时候,跳出循环。
将最后得到的”h0D”放入edi中。
之后跟着跟着就跟丢了。。。
跟了两天了……头晕。。。上来求救。。。
懂的大家一起来分析。相互学习。
[课程]FART 脱壳王!加量不加价!FART作者讲授!
收藏
・
0
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
最新回复
(
1
)
purpleroc
雪 币:
329
活跃值:
(230)
能力值:
( LV13,RANK:320 )
在线值:
发帖
32
回帖
277
粉丝
0
关注
私信
purpleroc
6
2
楼
自己再给自己顶起来。。。
虽然笔记写的比较差。看不太清楚,但 还是希望有朋友能够帮忙啊。
2012-1-15 12:44
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
purpleroc
6
32
发帖
277
回帖
320
RANK
关注
私信
他的文章
[原创]总结两次非常规破解网络验证
3969
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
返回
顶部