主要是想写些什么,发现突然发现哪个博客都不安全,记得有一段时间CSDN 被河蟹了很长时间,现在JavaEye 也有这样子的危险,再加上刚刚才开放的Tom的博客 ,真的是很危险,准备把所有的日志都弄下来到自己的机子里,然后用Word 、PDF 、文本文件 的格式都做上一份然后打包放在自己的空间还有邮箱。。。最近单位的网络时好时坏,到处都是ARP攻击。。。。多事之秋啊。
本人,男,属牛 ,专业生物工程(食品发酵方向) ,比较喜欢电脑,高中的时候学习不是很好,在上大学的时候对于自己的专业前途深感不幸(主要是听也听不懂 ),然后就开始自己看计算机方面了,开始自己从简单的C 语言还有一些基础的计算机专业的课本 看起,慢慢的给学校搞过一些ASP(VBScript) ,其实就是拿别人的代码照猫画虎的照抄,也看过一些3D Studio Max 和Maya 方面的书,后来还自己偷偷的猫瞧(māo qiǎo ·山西话,胡乱看的意思)过一些微软的DirectX ,最后什么都没搞成,什么都没有搞好,基础也很差,大三的时候被自己 忽悠去新东方 学了半年的Java ,现在混在北京。搞Java开发,不过貌似有几个月没有动过Java了,前一段时间是用Flex 作ArcGis 的展示开发。
貌似会写的很长,决定在前边加个序,主要就是想看看自己能不能把这个搞下来。不发到博客上自己总是显得没有毅力。
前些天拿到一套程序,是通过读取二进制文件来读取出数据,然后经过程序整理以后到客户端显示成为各种波形图像,第一点不幸的是这个是C\S 的 程序,第二点不幸的是我一开始拿到的只是Server端的数据和发送给客户端波形数据的程序,后来才拿到了二进制数据的格式,(PS:2009年11月4 日拿到了前台显示波形的代码,记录日期只是一个习惯,因为我经常一篇日志写上好几天),第三(还有第三。。苦恼)程序是C# 的,咱暂时还不会这个呢(前一段时间写VB.Net和Flex头都晕了,打开Eclipse都快不会写程序了)
不过对于程序员来说,最简单的莫过于学会一门开发语言了(最困难的则是掌握一门开发语言 ),问同事借了本基础书《C#从入门到精通》 看了看,准备读写那个该死的二进制程序。
不知道为什么用Java来开发总是读取不到正确的数据,也许是我从byte数组到实际结果的转换有问题,不过说句实话,我是不知道有什么通用的类库可以解决这个问题,也许Apache 有吧,谁知道关于二进制操作,包括文件读写 ,解析 ,从二进制 到Decimal 、String 、Integer 、Float 等各种类型的解析,特别是涉及到汉字编码 的Jar包类库,希望能告诉我一下,谢谢了。(PS:这个搞到了一部分,用Apache的commons-codec,汉字是解决了,但是数字还是个麻烦。尤其是什么float之类的,老是不对 )
发现自己的思维总是很发散,总是想着想着就跑到另外一件事情上了,这点在回住的地方和合租房子的兄弟们侃大山的时候尤其明显,经常跑题,或者是带着他们跑题。
貌似又跑题了。。。恩。。啊。。。思维比较发散。。,呵呵。。
想到二进制文件就突然想到了可执行文件也是一个二进制的。然后就想到了一个叫做nhl_7 games editor 的游戏修改器,在游侠网论坛(Netshow) 的实况专区 上可以找得到,虽说是个多种游戏修改器,但我主要用他来整我的实况(PC上称为Pro Evolution Soccer,游戏机上的日版机版叫做Winning Eleven) ,不知道那个修改器是用什么写的,但是是基于.Net Framework3.5 的,不知道他是怎么得知每个球员在内存中的各种属性的位置 的。俺也想搞搞这个(很没品位是不是? )
因为.Net平台 的开发简易性,还有和Windows 的兼容性,准备用这个了,至于暂时是VB.Net 还是C# 还没有考虑清楚。貌似这两种语言都不熟 。
这就是整个事件的起因,是不很晕 。。。。没救了。。。
找吧!翻出来老早老早以前的工具箱。。。内存分析利器(或者是最佳脱壳工具,外挂制作者的最爱、挂马嵌钩子的必备用品)OB(OllyDebugger)。。。发现。。。软件版本太旧了。。。 下个新的。。。
然后用这个打开扫雷,如图所示:
这个PUSH。。。CALL应该就是程序的主入口了。。。不知道这个是什么的就算了(计算机专业的看不懂的可以去南中国海喂鲨鱼。。。或者买块豆腐脑撞死。。。 )。。看来我汇编还是太差啊。。。打开一看,倒不是很长。。。可是尽是看不懂的。。。
主程序方法:
程序调用过rand这个随机数方法,然后在程序里边找包含rand的方法块,就是点那个笑脸(或者是切换难度)的方法。
这里是方法声明:
通过这个方法,直接在OD里边Debug,然后不停的切换难度,可以找到以下的内存区:
被选中的01005330就是地雷的数目(十六进制63转换成十进制是99)
然后那个位于01005334的1E就是宽度:30
下边的在01005338上的10就是高度:16
然后地雷在哪里呢?
通过分析程序中rand的使用
(他会随机一个雷的位址)
我们在这里找到了所有雷的定义
从01005362开始就是类,然后测试就很简单了,随便点一下。看看那个是雷。。
最后得出的结论是8F是雷。
我们再随便打一个试试,这个第一个是雷,然后接着四个不是雷,然后连续三个雷,。。如何。。对吧?
以后就简单多了,
程序员,当然用程序解决问题:
首先得到扫雷的宽度和高度还有总有多少颗雷
ReadProcessMemory(ph, &H1005334, width, 1, bytesRead) ReadProcessMemory(ph, &H1005338, length, 1, bytesRead) ReadProcessMemory(ph, &H1005330, numberMine, 1, bytesRead)
然后我们写个WinForm输出一下:
输出的时候用这个:
For j As Integer = 0 To length(0) - 1 For k As Integer = 0 To width(0) - 1 ReadProcessMemory(ph, &H1005340 + (32 * (j + 1)) + (k + 1), buf, 1, bytesRead) If buf(0) = &H8F Then Me.TextBox2.Text += " " Else Me.TextBox2.Text += "■" End If Next Me.TextBox2.Text += vbCrLf Next
不好意思用的VB.Net不过用C#也是一样子简单的。。。。活活活。。。。
然后运行:
这样子要是能点错。。。可以去买新眼睛或者撞墙去了。。。。。
或者你可以更流氓一些。。。把周围的1234也显示上去。。。
PS:座天是周一。。。变天了。。降温了。。下冰雹了。。。不过下的很少。。。结果今天的雪落得不小,公交好难挤啊
最后缅怀一下我们附近的一位住户。他星期天搬走了。。。以前我经常用他的无线路由蹭网。。。他的密码很简单。。。。。以后附近再也没有这么好的信号源了。。破解也得等很长时间了。。。哎。。