﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Sheppard Y-随笔分类-解决问题</title><link>http://www.cppblog.com/yangsf5/category/20871.html</link><description>keep thinking keep coding.</description><language>zh-cn</language><lastBuildDate>Thu, 14 Jul 2016 09:22:26 GMT</lastBuildDate><pubDate>Thu, 14 Jul 2016 09:22:26 GMT</pubDate><ttl>60</ttl><item><title>一次简单的hack</title><link>http://www.cppblog.com/yangsf5/archive/2014/05/15/206970.html</link><dc:creator>Sheppard Y</dc:creator><author>Sheppard Y</author><pubDate>Thu, 15 May 2014 03:11:00 GMT</pubDate><guid>http://www.cppblog.com/yangsf5/archive/2014/05/15/206970.html</guid><wfw:comment>http://www.cppblog.com/yangsf5/comments/206970.html</wfw:comment><comments>http://www.cppblog.com/yangsf5/archive/2014/05/15/206970.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yangsf5/comments/commentRss/206970.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yangsf5/services/trackbacks/206970.html</trackback:ping><description><![CDATA[<div><div></div><fieldset><legend><span style="color: #ff0000; line-height: normal;">2016-07-12 日更新&nbsp;</span></legend><div><span style="line-height:normal;color:red;">此篇博客已经迁移到新博客，并做行文检查和优化排版：<br /></span><div></div></div><a href="http://blog.clawz.me/2014/05/15/14-a-easy-hack/"><div><div><span style="color:red;">http://blog.clawz.me/2014/05/15/14-a-easy-hack/</span></div></div></a></fieldset><a href="http://blog.clawz.me/2014/05/15/14-a-easy-hack/"><div><div></div></div><span style="orphans: 2; text-align: -webkit-auto; widows: 2;"></span></a><span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><br /><font face="微软雅黑" size="3"><span style="line-height: normal;">一、背景</span></font></span><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;朋友公司有款老软件，运行在windows下，C/S架构。客户端为很久前外包开发的。这个客户端为GUI界面。朋友想定时自动让软件做些事情。这个客户端以前设计时没有提供这种定时功能，只有每次执行当次的操作。朋友自己对软件开发不熟，如是找到我。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;"></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">二、朋友给的解决方案</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;他表示做个按键脚本之类的，定时的去模拟在客户端上的单次操作。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;"></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">三、我的解决方案</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">（一）了解需求</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;这是C/S架构，之前是每次鼠标点击后，客户端给服务器发送相应的网络包。现在要做的是破解这个协议，然后自己写程序定时发送对应协议的网络包即可。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;"></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">（二）解决方案</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;朋友的解决方案，对于擅长客户端的人是可以的。但是我不怎么擅长，会花不少时间。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;所以我选择我自己更擅长的网络编程。如上边说的，先破解协议，然后想干啥就非常方便了。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;"></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">四、解决过程</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">（一）破解协议</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;本想找个协议监听软件，我来远程操作就行了，但是他们使用环境公网无法连入。如果我写文档让他来按步骤走，对于非专业人士来说也挺费事的。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;随后我想到他们的行业不那么互联网，他们联系的外包素质应该不是那么高。估计也就是windows那套.net搞的，顶多也就java搞的。所以让他把客户端拷出外网，我来反编译试试。同时我去网上查下.net的反编效果，有网游表示没有混效果的C#代码反编出来跟源代码基本没啥区别，另外以前反编译过java，反编得的代码也跟原工程差不多。所以开始淡定的祈祷反编顺利。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;看了眼客户端里的各文件，感觉到是C#，找了个dotPeek，反编译出来相当清晰。（这玩意的反编译效果比以前反编译flash的代码还清晰，flah反编译后的变量名基本编程local1之流了，这个C#反编出来变量名都是好的）</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;"></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">（二）分析协议</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;C#代码虽没写过，但是语法跟Java/C++非常像。分析起来不是很费劲。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;果然代码写的很windows的.net，客户端直接连接的数据库，然后在客户单发起select之类的查询语句。数据库表和字段名基本是中文拼音首字母。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;后来具体逻辑也懒得看，直接找到数据库的配置，让朋友在内网装个数据库客户端，连数据库看表里数据了。让他比对表里数据和客户端软件上显示的数据对比，找出咱们要的哪几个字段。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;"></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">（三）实现需求</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;这个是整个过程里最简单的了。用了自己最喜欢的golang写了个没有GUI的程序，定时给他去数据库查想要的数据。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;"></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">五、后记</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;整个过程的顺利多亏给他们写外包的公司用的C#，还没有做代码混淆之类的。</div></div><img src ="http://www.cppblog.com/yangsf5/aggbug/206970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yangsf5/" target="_blank">Sheppard Y</a> 2014-05-15 11:11 <a href="http://www.cppblog.com/yangsf5/archive/2014/05/15/206970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>