| 查看: 311 | 回复: 0 | |||
| 当前主题已经存档。 | |||
sdlj8051金虫 (著名写手)
|
[交流]
[转贴]揭Security Folder的底
|
||
|
目标:Security Folder 1.42 工具:OD,PEID, IMPREC, LORDPE, DEPENDENCE 任务:1,解决软件使用口令。 2,戳破谎言,侦察其保护文件方法。 行动: 1,大概了解。 引用下该文件说明 “Security Folder采用了与此不同的全新的方法,我认为该方法比上面两种方法显然效果更好。如果没有登陆软件,即使对电脑硬盘进行全面搜索,也无法搜索到所创建的文件夹及其内容。一般的人是根本无法破解的。” 当然了,最后我们会看到它的真面目。使用方法略,看帮助。 2,脱壳。 首先,用peid侦察下,发现是aspack212的壳(用peid查只是做的到心里有数) OD载入,顺利得到oep为14c4(简单壳,代码略)。 用IMPREC对import进行修复,得到1.15m大小的脱壳后程序x.exe(起名是个人爱好) 运行x,出错了,弹出“无法定位程序输入点 RtlRestroreLastWin32Error 于动态连接库 kernel32.dll 上。”,这句话可能大家经常遇到,下面我们来进行手工修复。在x上单击右键选择 View Dependenice(当然假定你装了vc)就是用DEPENDECNCE打开x,这里可以看到引入的dll,发现有2个dll变红,kernel32和oleaut32,这说明,import里对这两个dll的函数可能有错,点击发红的dll,在右上栏中寻找RtlRestoreLastWin32Error,果然,前边的i字母变红,表示有错误,当然有错误了,因为该函数根本就不在kernel32中嘛,他在ntdll里,当然了我们在oleaut32里也找到2个出错函数分别是hint为0x00b的VariantC和hint为0x000的一个未知函数,注意hint值是关键分别在2个dll的导出表(右下)查出错函数的hint,结果RtlRestoreLastWin32Error对应的是SetFileAttributesW,VariantC对应的是VariantCopyInd,至于那个未知,先不用管,因为lordpe查出它根本不占位置,估计imprec的错吧,接着,就打开lordpe对其进行修复,替换为正确的函数,有个小插曲就是VariantCopyInd比VariantC长,改变不了函数,我们索性把它和hint为0的那个函数一起删掉,希望不影响什么功能!运行,ok。 脱壳总结:壳到容易脱,修复到是费了我点时间,至于为什么会出错,对于RtlRestoreLastWin32Error来说,我猜想是kernel32的版本问题,98或me下的朋友可以查一下hint0x306是什么,对于VariantC我认为是import表太小的原因,有可能是imprec修复的时候出的错,因为根本就没有VariantC这个函数。 3,破解口令。 我们先运行软件,随便输入密码,哈哈,太好了,有出错提示,这样就 有突破口了,用w32dasm载入,我们主要用它的字符串查找,因为OD对中文支持不太好。“密码错误!你没有登陆本软件的权限!”就是它,双击 :0040A095 BA02000000 mov edx, 00000002 :0040A09A E8710F0B00 call 004BB010 :0040A09F 59 pop ecx :0040A0A0 84C9 test cl, cl //关键比较 :0040A0A2 7425 je 0040A0C9 //关键跳 :0040A0A4 6A40 push 00000040 * Possible StringData Ref from Data Obj ->"登录" | :0040A0A6 B90D194C00 mov ecx, 004C190D * Possible StringData Ref from Data Obj ->"密码错误! 你没有登录本软件的权限!" | :0040A0AB BAEB184C00 mov edx, 004C18EB //来到这 呵呵,理论上把je改成jne就爆破了,但是我们不知足,需要找出密码,进而写出看密码器。但是我们今天主要任务是搞清它是怎样隐藏文件的,看清他的嘴脸,所以,这步我们推后! 4,窥视其保护方法。 根据其帮助,大概意思就是可以“创建一个使别人发现不了的安全文件夹”,注意引号,提取下就是创建文件夹!CreateDirectoryA!就是它,下断!跑起软件,随便创建一个安全文件夹,yeah!感谢上帝,感谢od,看下他的参数,一目了然,所谓的安全文件夹居然是…… 0012FC28 00E338FC |Path = "C:\recycled\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ALL" 由于软件的无耻,使的这重要的一环到此结束!真相大白了! 总结:没什么好说的了! 5,解决3的残留问题,写看密码器。 在其所谓安全文件夹里发现一个ps.ini的文件,大家可以自己看,其中ps的值不知道什么意思,尝试改变密码后发现有变,相信它就是加密过的密码! 对于ini文件,GetPrivateProfileStringA是个不错的断点,果然,断下来了, 后边就是密码的还原,简单算法,不说了,给出看密码的东东 #include #include void main() { char s[10]; GetPrivateProfileString("SFolder", "PS", "0", s, 10, "C:\\recycled\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ps\\ps.ini" ;for(int i=0; i<10, s!=0x00; i++) { s+=(i+1); } cout< [ Last edited by sdlj8051 on 2006-10-6 at 11:34 ] |
» 猜你喜欢
基金申报
已经有5人回复
基金委咋了?2026年的指南还没有出来?
已经有7人回复
国自然申请面上模板最新2026版出了吗?
已经有17人回复
纳米粒子粒径的测量
已经有8人回复
疑惑?
已经有5人回复
计算机、0854电子信息(085401-058412)调剂
已经有5人回复
Materials Today Chemistry审稿周期
已经有5人回复
溴的反应液脱色
已经有7人回复
推荐一本书
已经有12人回复
常年博士招收(双一流,工科)
已经有4人回复











;
回复此楼