Sheppard Y

keep thinking keep coding.

一次简单的hack

2016-07-12 日更新 
此篇博客已经迁移到新博客,并做行文检查和优化排版:
http://blog.clawz.me/2014/05/15/14-a-easy-hack/

一、背景
     朋友公司有款老软件,运行在windows下,C/S架构。客户端为很久前外包开发的。这个客户端为GUI界面。朋友想定时自动让软件做些事情。这个客户端以前设计时没有提供这种定时功能,只有每次执行当次的操作。朋友自己对软件开发不熟,如是找到我。
二、朋友给的解决方案
     他表示做个按键脚本之类的,定时的去模拟在客户端上的单次操作。
三、我的解决方案
(一)了解需求
     这是C/S架构,之前是每次鼠标点击后,客户端给服务器发送相应的网络包。现在要做的是破解这个协议,然后自己写程序定时发送对应协议的网络包即可。
(二)解决方案
     朋友的解决方案,对于擅长客户端的人是可以的。但是我不怎么擅长,会花不少时间。
     所以我选择我自己更擅长的网络编程。如上边说的,先破解协议,然后想干啥就非常方便了。
四、解决过程
(一)破解协议
     本想找个协议监听软件,我来远程操作就行了,但是他们使用环境公网无法连入。如果我写文档让他来按步骤走,对于非专业人士来说也挺费事的。
     随后我想到他们的行业不那么互联网,他们联系的外包素质应该不是那么高。估计也就是windows那套.net搞的,顶多也就java搞的。所以让他把客户端拷出外网,我来反编译试试。同时我去网上查下.net的反编效果,有网游表示没有混效果的C#代码反编出来跟源代码基本没啥区别,另外以前反编译过java,反编得的代码也跟原工程差不多。所以开始淡定的祈祷反编顺利。
     看了眼客户端里的各文件,感觉到是C#,找了个dotPeek,反编译出来相当清晰。(这玩意的反编译效果比以前反编译flash的代码还清晰,flah反编译后的变量名基本编程local1之流了,这个C#反编出来变量名都是好的)
(二)分析协议
     C#代码虽没写过,但是语法跟Java/C++非常像。分析起来不是很费劲。
     果然代码写的很windows的.net,客户端直接连接的数据库,然后在客户单发起select之类的查询语句。数据库表和字段名基本是中文拼音首字母。
     后来具体逻辑也懒得看,直接找到数据库的配置,让朋友在内网装个数据库客户端,连数据库看表里数据了。让他比对表里数据和客户端软件上显示的数据对比,找出咱们要的哪几个字段。
(三)实现需求
     这个是整个过程里最简单的了。用了自己最喜欢的golang写了个没有GUI的程序,定时给他去数据库查想要的数据。
五、后记
     整个过程的顺利多亏给他们写外包的公司用的C#,还没有做代码混淆之类的。

posted on 2014-05-15 11:11 Sheppard Y 阅读(785) 评论(0)  编辑 收藏 引用 所属分类: 其他语言golang解决问题


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2013年6月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

留言簿(1)

随笔分类(77)

随笔档案(58)

me

基友

同行

业界前辈

最新随笔

搜索

积分与排名

最新评论

阅读排行榜