MyException - 我的异常网
当前位置:我的异常网» 互联网 » ISCC 2012 破解关第四题 小弟我已经不蛋疼啦

ISCC 2012 破解关第四题 小弟我已经不蛋疼啦

www.myexceptions.net  网友分享于:2015-08-26  浏览:57次
ISCC 2012 破解关第四题 我已经不蛋疼啦~

前一阵突然出现推出了这个破解关第四题,看了看没啥思路,题意大概就是让你反编译一个小程序,然后具体分析达到功能的方法,最后再仿写一个。

分析程序这一步不多说了,大概就是查端口,抓包,做些特殊数据的测试。端口我用的是冰刃,或者命令行netstat自己找也行,抓包我用的WSExporer可以进程抓包,比较方便

,可以在我的资源里下载。

通过端口和抓包大致可以知道,软件运行的过程是这样的。

现在2012端口建立socket连接,然后通过4次通信交换数据,最后开始阻塞模式下的聊天。


聊天过程中的抓包,在这里发现通信过程被某种方法加密了,上面的4次数据交换应该是对密钥的初始化。


收集了足够多的信息,最后进行反编译,工具使用olldbg,通过ULtra String Reference发现程序很友善的在注释中给出了提示,

大素数一,大素数二什么的,明显使用了RSA加密算法,不知道什么是RSA的同学可以看这里

http://www.cnblogs.com/happinessCodes/archive/2010/07/27/1786404.html

http://apps.hi.baidu.com/share/detail/12565498


最后就是蛋疼的分析,汇编语句了,通过PEID知道了程序使用c++编写的,首先需要找到main函数的入口点,c++中main函数是这样声明的

前两个参数应该都熟悉,第三个参数是系统的一些,环境变量,如%system% %windows% 时间,什么的,

如就是说如果发现一些获取系统环境变量的call,很大的可能就是靠近main函数的入口点了。


main函数的call之前必定有三个push来压入参数,类似于这样


跟进这个call,就可以慢慢分析代码了,小技巧是根据push的参数来判断,call调用的是什么函数,比如push了端口和ip地址,肯定是scoket初始化的函数。

还有汇编中push参数是从右向左。

还有调试过程中ctrl + F9 执行到返回  alt + F9 执行到用户态代码,是很有用的,可以让我们从一些不知名的代码中跳出来。

在汇编命令上点右键,查看参考,可以查看到语句中一些常量,比如地址什么的。

这一点也很有用,因为经常,会发现在应当出现立即数的地方出现了一些奇怪的东西,比如


艰苦的单步汇编就不多说了,结果如下(其实不是我写的O(∩_∩)O哈哈~)


最后我们得出了,程序的工作机制如下,

在本地生成私钥与公钥,在通信之前把公钥发送给对方,通信过程中使用私钥加密,对方用公钥翻译出原文。

还有一点需要注意,公钥是逆序传输的。


最后就是代码了,纯苦力活,有些调试用的语句没有去掉。

需要注意几点,

(1)使用char型存储revc到的数据时最好用unsigned char,这样在吧char转换成整形进行运算时,不会出现负数。


(2)c中最大的整形是__int 64,c++的一些编译器可以用long long,java中可以用bignum,这个类可以做到非常大,

对应的还有一个高精度浮点类,使用它可以消除浮点数运算的误差。


(3)不要轻易使用sprint函数来进行一些,string到int或者int到string的转换,因为零会被忽略掉。


(4)网络字节顺序和你的主机字节顺序可能是相反地。


(5)一定要会写快速密,并且用上位运算,不然会被岛君鄙视。


(6)相信自己,有可能你的想法是对的,但是程序出错了。



文章评论

程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
每天工作4小时的程序员
每天工作4小时的程序员
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
10个调试和排错的小建议
10个调试和排错的小建议
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
编程语言是女人
编程语言是女人
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
老程序员的下场
老程序员的下场
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员必看的十大电影
程序员必看的十大电影
中美印日四国程序员比较
中美印日四国程序员比较
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
那些争议最大的编程观点
那些争议最大的编程观点
漫画:程序员的工作
漫画:程序员的工作
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
我是如何打败拖延症的
我是如何打败拖延症的
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
为什么程序员都是夜猫子
为什么程序员都是夜猫子
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序员和编码员之间的区别
程序员和编码员之间的区别
Java程序员必看电影
Java程序员必看电影
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
代码女神横空出世
代码女神横空出世
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
我的丈夫是个程序员
我的丈夫是个程序员
程序员都该阅读的书
程序员都该阅读的书
如何成为一名黑客
如何成为一名黑客
一个程序员的时间管理
一个程序员的时间管理
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
总结2014中国互联网十大段子
总结2014中国互联网十大段子
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有