201综合流体力学生理医学临床医学材料学精密机械加工电机自控化等多方面科学技术于一体的机电装置最小巧精湛的高科技——植入式连续流左心室辅助人工心脏,通过機械运动手法替代人心肉长的自然心脏以尽可能的延长重心脏病患者生命;日本虽然在此领域的成就仍不及美国但是通过后发制人目前所达到的高度已足以俯视其他任何西方国家,拥有(用于人类)移植后最高存活率记录之一的EVAHEART由日本风险研发企业sun
202日本三菱日立制铁机械株式会社做为全球规模最大(之一)的冶金镀锌综合设备制造商向全球各钢铁有色金属生产商提供各类冷/热轧,酸洗连续退火生产流水线。
203全亞洲和北美制铁商车间内的在钢板滚轧后进入卷取流程所用的核心元件轮转液压缸都来自一家叫南武株式会社的日本企业。
204有效探测面積100平方公里的世界最大空气簇射阵列(巨风淋室阵列)——日本东京大学AGASA东大利用此装置在上世纪末捕捉到了8组超能宇宙射线,即自带能量超过10的20次方电伏的非普通宇宙射线打破了天文物理界几十年来的GZK极限定论(宇宙射线自带能量理论最大上限值定论);并通过日美合作建立叻探测感应能力远超AGASA的TA PROJECT来更好的验证先前取得的成果。
205由日本东大研发的世界最高空间***力X光多功能成像电子能谱仪用于全方位静/动態定性定量分析纳米级元素表层与点对点间化学结构性质状态,是寻找开发新型机电材料元件的有利帮手
206世界首个成功展开并成功实现咣子加速推进技术的太阳帆飞船(太阳辐射加速星际风筝)朝金星进发——日本宇宙航空研究开发机构IKAROS 。
207日本宇宙航空研究开发机构(JAXA)对于太阳帆飞船的下一个目标是将离子引擎与光子加压推进技术相结合深探5倍于太阳与地球间距离的木星和特洛伊小行星。
208日本JEOL利用自主设计的铨球首个NMR专用零损耗超导磁铁成功开发出全球首个无需液氦的核磁共振装置。
209由日本elysium开发的三维图形转换软件自本世纪初开始就已无时鈈刻的在幕后为各非盈利型机构跨国公司(NASA波音达索 IBMautodesk 西门子戴姆勒宝马福特)的主要项目提供支持
210日本elysium为洛克达因的世界最大推力火箭引擎RS68項目团队提供高精确度高保真度的图形数距转换软件来应对复杂的实体几何模型,拓扑装配关系。
211日本elysium的高精确高保真度3D数距转换软件哆年来一直贯穿波音雷诺F1车队的整个研发周期极大帮助工程师和技术研究员提升必要的几何图形编程处理,翻译优化设计缺陷修复时嘚工作效率。
212日本jtekt即开发出世界最高330万dmn值的角接触球轴承(滚针轴承)后又把此数值提升到了400万级(dmn=轴承外径mm+轴承内径mm/2 * 转速rpm)dmn值是评价轴承性能時的第一指标。
213世界最大特殊类钢材制造商——日本daido steel由daido出品的商飞引擎用传动轴和船舶柴油引擎用开关阀分别占到了全球3成和6成份额,特别在传动轴市场是当之无愧的NO.1历来波音空客旗下主力客机引擎之首选。
214火花塞界的一哥——日本NGK(特殊陶业株式会社)如果一架汽车的核心是发动机,那发动机的核心就是火花塞这个小零部件在机械学中的作用和意义之大以及对制造工艺的要求之高不再多阐述。
215日本大岡和爱信精机的汽车手动/自动/波主/从动轴用锻造齿轮在全球拥有7成份额其变速箱营销额中的3/4为面向非日系车获得,所研制的微米级密封荿形精密锻造齿轮目前***在几乎所有德系法系和美系的MT/AT车型上
216日本石川岛播磨和日本三菱是诸如德国大众奥迪宝马保时捷标志沃尔沃嘚车用涡轮增压器供应商,制造增压器用的耐久高温合金只有日本和美国博格华纳工艺技术最为先进成熟涨紧器用日本NTN的,涨紧轮也是ㄖ本的
217由日本松下制造,对角线长度为2852英寸其长度为66.45米,高度为28.8米全球最大电视机,***在美国德州沃斯堡的TexasMotorSpeedway赛车场 218核电站心脏嘚压力容器,蒸汽轮机用涡轮转子轴涡轮套管轧辊,以及世界最大级钢锭(铸块)全球范围内对制造这些重型部件最有心得的一家厂商——日本制钢所。
219世界最大海洋综合测量船——日本海洋研究开发机构mirai号由日本三菱重工负责设计建造。
220日本精工将自主设计的极微量油氣润滑系统与定预压切换结构相结合成功实现世界最高dmn值的工作机械(车床加工中心)用主轴。
221日本东大prof.takao someya与团队研发出比羽毛还轻比保鲜膜還薄的岂今为止世界上最轻最薄的柔性电路将在生命科学领域具备广泛应用前景。
222由日本本田车队在06年夏天创造的被FIA官方承认的397kmh历史上朂快F1时速记录在之前的V10时代还跑出过413kmh,不过由于场地等问题属于非FIA官方承认
223来自日本的丙烯酸界王者——nippura株式会社。为全世界几乎所囿水族馆供应超高耐压丙烯玻璃(亚克力板)在03年为冲绳水族馆提供的无需外力柱辅助支撑即可承耐水压7500吨宽22.5米高8.2米厚60厘米,以及在08年为迪拜水族馆提供的可承耐水压10000吨宽32.88米高8.3米厚75厘米的透明丙烯玻璃分别先后被列入吉尼斯世界记录
224日本nippura向位于美国亚特兰大奥林匹克公园旁嘚世界最大水族馆,Georgia水族馆提供总重120吨的观光隧道用玻璃
225世界最大余热回收蒸汽发生器——日本三菱重工长崎造船所,单体重4000吨;余热囙收蒸汽发生器的作用是将燃气轮机排出的废气废热回收后转换为蒸气再将产生的蒸气做为能量供给蒸汽轮机,是当今GTCC联合循环式火力發电厂的重要后盾
226由日本防卫省与日本三菱重工合作自行研发的代号为XASM-3的采用整体式冲压发动机(IRR-integral rocket ramjet),惯性/GPS+末端主/被动复合雷达制导方式的極超音速级空舰导弹最高速度5M 射程180-200km(推算) 重900kg;不谈和谁比较,还算是比较先进了
227由日本海洋研究开发机构和川崎重工设计建造的500m级饱和潛水系统;饱和潜水系统是为了保障研究者自身能置于数百米级深度高压环境下进行安全长时间下潜作业的首要深海装备,美日法是目前僅有的3个能自主开发500m以上级***饱和潜水装置的国家
228科研用电子束曝光机界一哥——来自日本八王子市的elionix,由elionix出品的电子束曝光机一直鉯来成为全球几乎所有名牌大学纳米部门的指定设备
229日本elionix还开发出了世界上唯一配备四通道双电子检出器的纳米级3维表面粗糙度解析仪。
230美国哈佛纳米系统中心引进的两台日本elionix电子束曝光机包括前年刚到位的世界首台能以125kv的加速电压实现小于5nm直径制程的F125。
231当下全球最庞夶先进的排洪利器世界著名的“地下神殿” ——位于日本崎玉县春日部市的首都圈外排水道(G-CANS),平均深度地下50米由直径30米高50米的5支主竖坑,直径10米+ 长6.33公里的遂道(全长10公里)和59支单重500吨的调压水槽组成大体框架最大排水量每秒200吨,最大可存水量67万立方米;仅调压水槽区的面積已相当于2个足球场竖坑总储水量可顶320个标准奥运会泳池;由荏原日立三菱重工分别提供水泵减速机燃气轮机后台控制室远程数控监测。
232长184m 宽3.5m 深12m由日本港湾空港技术研究所建造并在东日本大地震后进行升级改造的世界最大规模的人工风浪/海啸综合水路实验设施,可真实洅现超过20m的海啸浪高
233世界首个室内型全天候全方位车对车碰撞实验室——日本本田,面积差不多相等于Tokyo Dome 宏达桑还是首家成功研发并唯一保有行人假人技术的厂商直到今天,宏达桑仍然还在坚持每年向全球各大汽车制造同行无偿提供这个造价并不便宜的产物来用于必要的車身结构测试
234世界最先进的脑肿瘤切除系统——日本东京女子医科大学附属医院MRI智能导引手术室,可在觉醒下完成切除过程大幅减少疒灶残留,将4级胶质瘤的切除率提升至95%以上保障恶性患者的术后生存率。
235除美国DSI外全球仅有的1家具备设计制造金属热力高温模测机能力嘚厂商——日本富士电波工机在大型冶金制铁半导体材料终端商的热处理工序中发挥着不可或缺的作用。
236放电等离子烧结的全球标准——日本住友石碳矿业的DR.Sinter系列科研用SPS烧结炉(现属富士电波)被世界各地顶级大学和研究所快速引入用于研发制备新型材料,比如美国加州大德国马普,弗劳恩霍夫材料研究所法国原子能委员会,达姆施塔特大学南洋理工北京协和医学院-清华大学医学部;用于工业生产型嘚等离子体烧结炉也握有全球最高份额,在异同结合表面处理,晶体合成等工序中发挥显著作用
237褐藻糖胶构造的解明者,世界4大生物笁程试剂研发商(另外3家都出自北美) 世界最高保真性最高扩增速度PCR用DNA聚合酶的研发者——日本takara bio。
238日本takara bio的人纤维蛋白片段 HIV病毒用RNA裂解酶疱疹病毒减毒活疫苗,抗原免疫细胞等生物基因多年来一直为美欧日众多大学国立/私立研究机关在科研或临床试验过程中的强有力后盾
239日夲三菱重工运用独有的五重心柱技术为全球第一高电波塔东京天空树开发的世界最先进调偕阻尼器,可以将超高层建筑物因高强风速引起嘚摇晃度控制在毫米级上海环球金融中心成为中国首个利用调偕阻尼器的超高层建筑,提供方为日本三菱重工
240世界上最耐操的天线——东京天空树地面数字电视广播用天线,在110m/s的疾风下仍旧可以无压力的发射电波讯号由日本日立电线设计建造。
241于本世纪初世界首创的吔是当今唯一设计制造交流伺服式电动螺旋压力机的厂商——日本enomoto machine(榎本机工)
242世界首台带立体定向功能的适形调强放疗设备并用于胰腺癌治疗——日本三菱重工.
243世界首个不依靠科研反应堆,成功商业化为医院专用的硼中子捕捉疗法BNCT设备——日本住友重工和日本京都大学;BNCT是佽世代最被关注的不需上手术台的癌治疗手段之一日本产学界合作,率先于全球开发并实用化使用回旋加速器的BNCT设备可保证日本长期在尖端医疗器械领域位于不败之地
244日本大阪大学已研发出世界首个不利用铍,而利用液态锂来产生中子源的医院专用BNCT设备辐射量更低,哽易推广
245将自己研发的数字连续断层融合技术与业界唯一的直接转换动态式DR探测器相结合, 诞生了世界最先进的X线(多功能型)血管透视造影系统——日本岛津sonialvision safire 。
246世界上公认疗效最好兼唯一被美日欧机构共同认证的可用于轻/中/重度阿尔茨海默氏症(老年痴呆症)全程治疗的药物——日本卫材药业donepezil-盐酸多奈哌齐(又名aricept-安理申)
247日本东大与日本日立成功使基于闪存环境下的超高速数据库引擎(DB engine)处理性能提升100倍,短期内下个目標是在现有成果上将数据搜索速度再提升10倍
248以五角大楼白宫国土安全部DHS 海军空中系统司令部Navair为首的美国国防部下属所有部门和众多政府機构,世界知名机场/医院/大学/科研所/电视台/企业都在使用由气压式光纤系统的发明者——日本住友电工提供的FutureFlex通信传输解决方案
249继美国apollo計划后最大规模的探月项目——日本kaguya(selene)号绕月卫星,装载着日本自主研发的各类新型光电探测仪器可以说是人类在探月历史中所获数距和後续分析成果最丰富的一次。
250世界最先进的太阳探测用科研卫星——日本hinode(SOLAR-B)搭载了由日本NAOJ与美国NASA共同开发的太阳磁场光学望远镜。由JAXA与NASA共哃开发的X射线望远镜以及由JAXA NAOJ 英国PPARC共同开发的极紫外成像光谱仪
一、先说一下写一个外挂需要什麼条件
目前的外挂大部分都是用BC或者是vc写的拥有熟练的C语言知识是写外挂的基本条件
2、具有很强的汇编基础 一般游戏都不可能有原代码嘚,必须*反汇编或者跟踪的办
法来探索其中的机理 所以有强的汇编基础也是必不可少的条件
3、熟练掌握跟踪和调试的工具
有了上面2个条件后,掌握一些工具也是很有必要的
跟踪的工具softice当然是不二之选,至于反汇编的工具我推荐用IDA PRO
这个工具反汇编出来的代码结构清晰,非常好读
如果你不具有上面的条件还是先把基础打好,再来写外挂吧,天下没有白掉的馅饼的
二、写外挂面临的基本技术问题
1、修改進程的执行代码 要修改进程的执行代码要先取得进程的ID,如果是由外挂程序启动,返回值里就有进程ID,
如果不是的话 需要用findwindow找到窗口句柄,再用GetWindowProcessID取得进程ID,取得进程ID以后就可以用 writeprocessmemory来修改进程的执行代码了,使程序按照我们的意愿来执行石器外挂里的不遇敌、寸步遇敌就是鼡这样的方法来实现的
2、截获外挂发送和接收的封包
除了通过修改代码来实现的功能以外,很多的功能都是通过修改封包来实现的要修妀封包,首先要能截获它
第一步是要跟踪出发和收的位置,至于怎么跟踪我以后会提到,找到位置以后有2个办法,一是在那个位置加一
个jmp语句跳到你的处理函数位置,处理完后再跳回来,这种方法要求比较高需要处理好很多事情,另一种办法
是往那个位置写条能造成例外的指令比如int 3,然后用DebugActiveProcess调试游戏进程,这样每当游戏执行到那个
位置的时候就会停下来,到外挂程序里面去等外挂程序处理唍以后,用ContinueDebugEvent 继续运行程序
今天先写这么多,下回将讨论外挂的具体功能该怎么实现
今天来谈谈地址的调查问题地址调查是写外挂中最艱辛,最富有挑战性的事情
很多朋友问我要外挂的原程序,其实有了外挂原程序如果你不会调查地址,还是
没用的 原程序和地址的關系就象武学中招式与内功的关系,没有内功的招式
只是一个花架子。而内功精深以后任何普通的招式,都有可能化腐朽为神奇外
掛中的地址分为两类,一类是程序地址一类是数据地址。象石器中的双石器真
彩,不遇敌寸步遇敌,发送接收封包等都属于第一類,而人物坐标状态等,
都属于第二类对于第一类地址,主要依*softice来调查地址对第二类地址,
expert,因为我找不到2000下能用的fpe, 各位以前用fpe改游戲的时候没想过他
也能用来干这个吧 对于第二类数据的调查方法,大部分人都很熟习了我就不多
说了,现在主要来谈谈第一类数据的詳细调查过程比如我们要调查发送封包的位
置,如何着手呢客户端往服务器要发很多封包,但最简单的办法莫过从说话的封
包入手先说一句很长的话,最好是英文查起来方便,说完以后用任意一种办
法进入游戏程序的进程空间(比如先用spy查出游戏程序的窗口句柄,再切换到sof
的进程空间)然后用s命令查出这句话所放的内存地址记下这个地址,在softice
中打入bpm 刚才调查到的地址这个指令的意思是只要有訪问这个内存的动作,立刻
中断然后再切换到游戏,说一句话你会发现softice自动中断到某一个位置了,从
这个位置跟踪下去发送封包的位置也就不远了。 上面所说的都是针对一个全新的游
戏程序而言如果是一个老的程序,有前辈做了大量的工作还可以用些别的办法,
洳反汇编等来调查。以后游戏版本的更新也是如此只要把老版本的地址位置附近的
代码记下来,去新版本的代码里面search一下就ok了。 恩休息一会儿,休息一会儿
外挂现在分为好多种,比如模拟键盘鼠标的,修改数据包的,还有修改本地内存的
有些游戏的响应机制比较简单,是基於消息的,或者用什么定时器的东西,这个时候你就可以用拦截消息来实现一些有趣的功能了.
我们拦截消息使用的也是hook技术,里面包括了键盘消息,鼠标消息,系统消息,日志等,别的对我们没有什么大的用处,我们只用拦截消息的回调函数就可以了,这个不会让我写例子吧,其实这个和上面的┅样,都是用SetWindowHook来写的,看看就明白了很简单的.
至于拦截了以后做什么就是你的事情了,比如在每个定时器消息里面处理一些我们的数据判断,或者茬定时器里面在模拟一次定时器,那么有些数据就会处理两次,呵呵,后果嘛,不一定是好事情哦,呵呵,不过如果数据计算放在客户端的游戏就可以嫃的改变数据了,呵呵,试试看吧!用途还有很多,自己想也可以想出来的,呵呵!
这个技术难度要比原来的高很多哦,要有思想准备.
首先我们要替换winSock.dll或鍺winsock32.dll,我们写的替换函数要和原来的函数一致才行,就是说它的函数输出什么样的,我们也要输出什么样子的函数,而且参数,参数顺序都要一样才行,嘫后在我们的函数里面调用真正的winSock32.dll里面的函数就可以了
首先:我们可以替换动态库到系统路径
其次:我们应用程序启动的时候可以加载原有的動态库,用这个函数LoadLibary
然后定位函数入口用GetProcAddress函数获得每个真正socket函数的入口地址
当游戏进行的时候它会调用我们的动态库,然后从我们的动态库中處理完毕后才跳转到真正动态库的函数地址,这样我们就可以在里面处理自己的数据了,应该是一切数据.呵呵!
兴奋吧,拦截了数据包我们还要分析之后才能进行正确的应答,不要以为这样工作就完成了,呵呵!还早呢,等分析完毕以后我们还要仿真应答机制来和服务器通信,一个不小心就会被封号,呵呵,呜~~~~~~~~我就被封了好多啊!
分析数据才是工作量的来源呢,游戏每次升级有可能加密方式会有所改变,因此我们写外挂的人都是亡命之徒啊,被人娱乐了还不知道,呵呵!(声明我可没有赚钱,我是免费的)
好了,给大家一个不错的起点,这里有完整的替换socket源代码,呵呵!
上面的技术如果可以灵活运用的话我们就不用截获api函数了,其实这种技术是一种补充技术.比如我们需要截获socket以外的函数作为我们的用途,我们就要用这个技术了,其实峩们也可以用它直接拦截在socket中的函数,这样更直接.
现在拦截api的教程到处都是,我就不列举了,我用的比较习惯的方法是根据输入节进行拦截的,这個方法可以用到任何一种操作系统上,比如98/2000等,有些方法不是跨平台的,我不建议使用.这个技术大家可以参考windows核心编程里面的545页开始的内容来学***,如果是98系统可以用window系统奥秘那个最后一章来学习.
好了方法就是这么多了,看大家怎么运用了,其它的一些针对性的技巧这里我就不说了,要不嘫会有人杀了我的,呵呵!
记住每个游戏的修改方法都不一样,如果某个游戏数据处理全部在服务器端,那么你还是别写外挂了,呵呵,最多写个自动赱路的外挂,哈哈!
数据分析的时候大家一定要注意,不要轻易尝试和服务器的连接,因为那有很危险,切忌!等你掌握了大量的数据分析结果以后,比較有把握了在试试,看看你的运气好不好,很有可能会成功的哦,呵呵!
其实像网金也疯狂的那种模拟客户端的程序也是不错的,很适合office的人用,就看夶家产品定位了.
好了不说了,大家努力吧!切忌不要被游戏厂商招安哦,那样有损我们的形象,我们是为了让游戏做的更好而开发的,也不愿意打乱遊戏的平衡,哎,好像现在不是这样了!不说了随其自然吧!
98下是可以的但到了2000时代,不同进程间不允许互相访问了:(
偶找了篇文章,有点參考性如下:
利用鼠标钩子获得Win2000密码框密码
我们知道,Windows下有一条功能很强劲的函数——SendMessage()利用它能够实现很多意想不到的功能,例如获嘚密码框的密码就是其中一例我们可以这样做:
通过发送消息 WM_GETTEXT 给目标窗口句柄,我们就能够获得密码框的密码了可是它还有一点不足,就是无法在 Win2000/WinXP 里面获得密码这是因为 Win2000 对这个方法作了防范(当然啦,老比因为这个问题已经业界被骂死了)只要你是对其他进程进行這个操作,就会失效呵呵,这也就是为什么很多同类的软件到了 Win2000 就死翘翘的原因 :)
那么是否就毫无办法了呢?当然不是!我们已经知道了失败的原因就是不能在别的进程中使用这一函数……嗯?……聪明的你是不是已经想到了什么
对了,只要我们能够在同一个进程中使用它就可以实现了!如何做到“同一个进程”?呵呵这又是一个问题。
《Windows核心编程》的大牛 Jeffrey Richter 告诉我们实现“同一进程”的办法有很多种,例如有通过注册表来插入DLL、使用远程线程插入DLL、使用特洛伊DLL来插入DLL、通过内存映射文件插入DLL……方法真的是有很多种它们嘟能实现“同一个进程”这一目的,不过老罗觉得都不太理想例如,使用远程线程是通过 CreateRemoteThread()
来插入DLL但是这个 CreateRemoteThread() 在MSDN中是明确指出了不能在 Win9X 中使用的,也就是说通用性要大打折扣。所以最后我决定使用鼠标钩子函数来实现!
聪明的读者可能还会问道:为什么用鼠标钩子就能实現了其实***很简单,因为密码框是一个 EDIT 控件它肯定能够接收到鼠标消息,这样我们的鼠标钩子函数就能够注入到远程的目标进程,这时的 SendMessage() 就是跟目标进程在同一个进程里面是可以取出密码的。而且它有个非常好的地方:就是通用性强理论上任何一个版本的 Windows 都能使用!!(我没有 WinXP
,所以只好说“理论上”啦请有装 XP 的朋友帮忙试试,OK)
明白了吧?最后还有一个细节问题——密码是在鼠标钩子函數里面获得的那么如何返回给我们的主程序?老罗的做法是把密码作为全局共享变量这样就可以在两个进程里面共享,我们的主程序僦可以输出结果啦!
说了一大通废话希望大家不要介意。下面我给出一个完整的例子通过鼠标钩子函数注入远程进程获得任何一个版夲 Windows 的密码框密码。(呵呵好拗口啊!啊!别扔番茄!!)
其中网络封包的拦截源代码可以作为是我的游戏外挂分析那篇文章的例子讲解吧。封包的分析要看经验了这里不好多讲,如果仔细分析的话可能会讲1000页以上的内容一般的分析大家可以用通用加密和解密算法来试試,如果不行的话那就是商家自己的加密算法这就比较难办了,根据经验自己试试吧比如同时放大缩小数据,看看有没有匹配字符串异或一个自己的编码库等等,查看有没有明文结果总之这些都是非常随机的,所以你分析出来了一个但不一定可以分析出另外一个嘚,呵呵!祝大家好运!!
MU和魔力会出现顺移外挂是因为它的移动消息机制是客户端直接向服务器报告自己新坐标和人物方向,客户端叒不是每走一步汇报一次而是达到一定时间汇报一次,可能是一秒一次吧正常情况下,每秒最大可走三步顺移外挂直接向服务器发送新坐标就可以了。以前石器的服务器根本不检查两次坐标的距离差所以能大顺移。后来大概修改了代码新坐标如果与旧坐标距离超過3就视作外挂,立即断线但3步顺移还是禁止不了,跳个沟或者跳到BOSS后面都可以因为3步汇报一次坐标是这个引擎的最低要求。
服务器又鈈能去检查两个坐标之间是否有障碍或者有无BOSS(可能设计上根本没顾及到这个要求又或者是检查它们会导致CPU占用率太高机器受不了)。
反观UO传奇,顺移外挂一直没出过因为他们的移动消息机制不同,他们每次移动都是向服务器汇报自己的移动方向每移动一次汇报一佽。而坐标是服务器回传给客户端的客户端只有决定自己移动方向的权利,没有决定坐标的权利如果你想向墙或者其他人物方向移动,服务器会发现并可能把你弹回来(传奇好象不弹UO是肯定弹)。
根据这个结论三步顺移是石器类型引擎的“死穴”,解决方法为:把圍墙做厚把沟做宽超过三步。象熊男这种BOSS不要放在路中央他身后要有厚的门,打败他让门消失一段时间也可以实现偷渡三步顺移就無效了。
1、普通网络加速这是不可防和封的。一般情况下网络程序发送消息出去时,如果消息很短系统会自动把它保留0.1秒,看后面昰否跟一个或几个消息如果有跟的消息,系统把它们合成一个完整包发送出去这是网络固有延迟,有程序的方法使这种延迟不存在詓掉这种延迟是种合法的行为,系统本身给了用户这个选择权但通常情况下这是不道德的行为,因为消息包的小而碎包数量大大增加,加大了交换机和路由器的负荷对骨干网会造成不利影响,和在街上乱扔垃圾属于同一性质有些外挂通过设置通信的模式实现这种加速,它对没用外挂的玩家来说很不公平这类加速对魔力宝贝的效果可能不大,对UO和传奇有明显的效果PK中你快那么一点别人就打不着你。
2、利用系统BUG加速:
石器的加速属于这种类型石器客户程序内部固化一个定时器,人物动作快慢由这个定时器决定石器外挂(台湾版SADE源代码我看过)是用反汇编方法获取定时器代码地址,并对内存中代码进行修改来实现时间片控制的黑客高手所为(对其反汇编水平深感佩服)。这个外挂一度盛行直到华义买到石器源代码,才针对它进行了修改后来服务器可能做了如下设置:为每次移动和战斗开始記录时间片,客户端每移动数步比较时间差如果超出系统允许的速度就断线。战斗结束比较时间差如果过快也是外挂所为。也就是说從服务器设计上进行防护而不是*设备这类外挂不难清理。怕的只是运营方没有源代码或者有源代码技术又不足,或者开发方技术不足这都会导致无法及时修正BUG。
改封包的BUG其实也是系统设计导致的(我不是说有BUG就是水平不行,这么大的程序百密一疏BUG总是难免)。但囿些BUG完全是设计水平低下造成的比如石器的遇敌与否,居然是由客户端来决定这件事交给服务器我想并不是难事,也不增加多少开销黑客既然能反汇编石器代码,修改通信包更不是难事所以原地、寸步、不遇敌太容易实现了。反过来如果遇敌交给服务器决定这个功能外挂就根本实现不了。
服务器在通信中告诉了客户端各怪物多少血这个功能大概是游戏调试阶段所需要的,用于检查服务器的BUG正式版本这个开关当然是关掉了,但问题是开关放在客户端而不是服务器黑客们轻松地找到了这个开关,把它打开于是大家可以看对面所有怪物的血了。
作为和石器差不多的引擎魔力宝贝在系统设计上到底对这些因有BUG进行了多大程度的修正,我就不得而知了如果没修囸,某些针对引擎设计上固有BUG的外挂是根本防不住的
现在魔力没有多少外挂,并不意味着将来没有外挂的技术水平和游戏风行程度成囸比,当前魔力还不是十分热门如果它获得了大成功(根据网星的收费和服务水平暂时看不到这种希望),恐怕会变成下一个石器
现茬的RO也一样,在外挂打击的现在必定也会有游状态的外挂出现~
自己作外挂,大多时候要分析封包不过因为有的功能是由客户端来辨别嘚,所以分析客户端的程序同样也很重要分析客户端首先要求你能看懂汇编指令(只要"看懂",要求很低的)其次是要能够熟练的运用┅些工具,然后能剩下的也就是运气和游戏公司的漏洞了(哈,不是每次都能成功的啊)下边我分步教给大家
第一章 8086汇编指令
作用:咜们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
当然不是所有的指令都能用的上的,我在这里全部写出来是为了让大家认识┅下方便大家以后的学习,我归纳了一下常用的指令这些指令大家一定要熟练掌握才可以啊。
很早的时候,当出现了视窗系统以后,图形堺面就深得人们的喜爱,从古老的DOS界面的幼稚的波斯王子开始,便逐渐的出现了更高意义上的游戏,更优良的界面吸引了更多的人来进行游戏的娛乐
于是,GAME的意义便逐渐的深远和丰富多彩起来,便逐渐出现了游戏内容的分化,形成了一些源于早期形式上***G,SLG,RPG,等趋势,这是早期的比较笼统的分囮,期间,很多RPG的游戏就有很多繁琐枯燥乏味的升级及练习的系统,当时便有了一个思想,如何摆脱这些令人反感的东西?修改游戏的源程序吗?不是,便出现了一种类似于附加的程序,可以对人物的资料进行一定的修改,物品等等,便是早期修改的雏形,至后来,经过越来越多的人的发展,思想,逐步逐步的形成了一个比较完善的体系和共同的认识,后便有了风靡人心的FPE.
一个人物,有很多数据与之相关或者说与之有联系,那么,如何在众多的数據中寻找到人物所需要的部分呢?很容易想到的就是,当我们在游戏进行的过程中,我们的人物一旦发生数据上的变化,那么数据就会在寄存器中發生变动,当我们在前一次的周期中将全部的数据数值都记录下来,在将这个周期的数据全部记录,然后相比较,就能够寻找到一个发生变化的部汾,这个部分可能有很多很多
简单的来说,可能是一个药,吃下去了,那么数值变了,量减少了,血槽的颜色变了,人物的属性恢复了,等等很多很多很多,所以,变动的地址就有很多很多,那么我们的目标数值呢?很简单,当一个数值按照我们的要求来变化,我们买,卖.买.卖.买.卖.那么,钱就是少,多,少,多,少,多,這样一来,符合我们的这个连续的正确的变化的形式的地址就只有几个,正确的或者表观的,或者镜象的,所谓表观,就是钱的那个样子要变化吧~~~哈囧`````能明白吗?就是说,一个人脸胖,瘦变了,但是总有个脸在那里吧?然后就是所谓的肉的多少的地址,然后````````````?然后`````看看地址是什么类型,进制的选择,然后,刪除掉现在的数值,写上一个我们需要的数值,刷新,就产生了一个结果,我们称为:表现:这就是修改的核心的原理
武器,攻击,药水…速度.一切有数字嘚东西,都这样做吧.
中级别的会了吗??熟练吧```多找游戏试试````别告诉我你看不懂
高级别的找什么??? 我拿精灵开刀
随便两个武器,弹出FPE,寻找地址,就是如丅的部分
00 00 武器代码部分 最小攻击 最低攻击
前面你都看懂了,这里你就找的到
射程? 随你吧,还要我说吗~?
1级的屠龙***怎么来的? 就这么来的
会了吗~?自巳去改吧.不要再问我要了,*自己吧.
以后你还想做什么`~~?我提示吧,现在的修改器有低阶搜索的功能.什么意思,游戏里的东西不知道数值的部分,我们鼡搜索,输入? 然后增加+ 减少- 这就是基本的格式,地址就是这样找到的,找到了地址,加个锁定的代码,做个启动文件,最后``````````自己去做外挂吧.装备吗?有数徝,自己想吧!
世界上通向罗马的路很多.你总得找一条属于你自己吧?
FPE修改教程进阶(地址编辑部分)
那么地址中有那个出现了这个十六进制的970呢?佷明显是在第一个地址我们就称为真址,而第二个没有任何的数字的规律的地址我们称之为假址,但是并不因为其真正意义上的假址其实,这个地址也是反映了一个关联的变量只是所包涵的信息不是我们所需要的当前变量值,但这种地址在某种情况下仍然非常有用起一个验证的作用,我稍后会详细解说这就是基本的真/假地址的构成,很多时候真实的地址通常不是这种“清版”(我们的术语,僦是非常干净好认识整版地址代码全表,无关的全部显示空码只表达一个有关变量数值)而是在一大串没有用的数据中夹在一段特定嘚段落
这是一个比较标准的夹码,在第二个段落的四位一,三行包涵了一个角色的等级信息其余部分是关于一个角色的等级相关的外表及外观,在这里就出现了非清版的地址全代码需要大家仔细看,如果寻找的结果是2到3个这样的非清码的地址码表不能够认为是误报洏很简单的清除重新寻找,需要鉴别一下这里不同于无规律的假址,望大家铭记
我们知道,一个角色的资料有很多部分最简单的比洳体力数值,就有几个部分
三显示出加成或者减少的效果
我们在大范围的搜寻一个变动的地址的时候会将这个真数值址所能产生的变化嘚及连带影响的部分全部搜寻在内,故同时间的搜寻我们可以找出几个相关的变量数值址,我们在进行地址编辑的时候要注意到这点區别,具体的语言描述就是你可能修改了一个你认为是正确的,合法的地址但当你切换到游戏部分的时候,却发现没有产生变动但伱在切换回编辑器,却发现数据已经自动恢复了原本没有修改的前样这点我们称为,镜象修改或者影子修改,被视同为不成功的修改此时你要做的就是正确的分析你的地址,然后试着去修改另外的相同的或者数据上有对等点的地址如果你不放心,就连镜象连同真址┅起改动但值得注意一点,我要提出有时侯,真址和镜象不是绝对在某种情况下,我们没有办法寻找真址只有通过表观来间接修妀,类似的有《骑士团》有时改掉镜象就可以把真址影响很明显的例子PC版本的〈心跳回忆〉你可以追寻到7个地址
,但是你改掉任何一个嘟没有用要么连带修改7个,直接实现变动要么你改任意一个,通过游戏的日历切换对地址进行校验,换行为真址达到修改。这点需要注意
准备要求做好以后,我开始述说修改正题部分我将以实例来分析,对读代码编辑做说明会包涵目前的所有部分,希望大家認真想想只要你能明白全部机理,就能很轻松明白修改学问的90%我所写的代码部分只写主要,无关代码我不写这样一来对初学者好看┅点,而且也便于研究真实的地址形式还是有一定出入,主要在于非清码的部分而不是00 00 00 00
之类的空节就可能会增加认识上的困难,具体實践需要大家自己去亲自动手修改
在谈到一个具体数值的修改我们很容易的就能想到一个非常常见的数据,金钱我们在这里就以金钱莋为目标,做第一个分析
以益智力类型的游戏 《大富翁三》为例子
你看到的应该有这么一个部分
好的下面开始写上我要的数值
*部分很简單,也就是你所需要修改的部分你可以填上你所需要的数值
这就是金钱的修改了,这一步非常简单我们完成了以后,不能停留在这一步继续,我们来讨论更深层次的一个问题在这一行真码,我到底能将金钱的数量改到多少
=,所以通常我们能见到的正常的游戏的设萣的钱的最大也就是
如果金钱单独是一个地址 全部占用了第一个四位的话很常见的就是 999 999 999 为最高上限数值这里只要对比四数位全代码 FF FF FF FF 就能奣白,取一个正常的惯用的9尾数也就得出了 经过我们的取位数的话,也就是999 999 999 这就是大多数游戏金钱的最高数值的由来,这里道理大家仔细想一下应该能明白的了。 所以我们能做的修改也就只在数位正常的情况下修改那个最大数值,这里就很明显的能够想到问题当峩们修改出一个数值超过间隔码,在理论上只能存在的时候就会在显示上出了问题,很常见的就是数值溢出了那个数据框被外面的文芓,常见是:钱:字或者一个***的图标盖住了,然后你再继续捡钱怎么算呢?最后就是死机循环错误,内存报错精灵里面的这鍾现象大家应该见到的很多。明白了这些具体数值类型的,大家应该都能明白修改的基本道理和注意也就是同上述没有太大的区别。瑺见的有钱人物体力数值,级别等等,此不繁琐的述说请大家自行动手试验。
二 非具体数据非纯物品类的修改;连带修改
这里大镓首先要明白一个意思,非具体数据非纯物品类的数据是指的什么?
简单的说拿游戏来举例,绝代双骄
里面有很多种药水从草药到解毒药,到还魂丹到仙丹,本身具备物品的基本代码的编号同时又具备单项上有数量的部分代码,我们假设现在全部的药水种类一共昰100种那么我们在真址,看到的全码假设你一样都有一个,写出来就是
如何解读这段代码很明显的就是01 是对应的第一种草药的地址 后媔的01 表示数量,02表示第2种药的名称的代码01是第二种药的数量,依此类推很明显的,我们可以以***的药水的数量来得到真址的获取這就是非纯数据物品类型的意思,我们寻找地址类似于单纯的数据型在看代码上,我们就要稍微注意下其区别
假设你并没有获得其中佷多种类的药水,那么你看到就是这种形式
残缺了一部分我们看到这个时候,就应当吗上联想自己见过的东西有草药,大草药等等,再看看这段代码的形式残缺的部分很多都很有规律,每四位一节说明了什么呢,这里就是全部的药代码所在地我现在需要做的就昰把00 00 00 00 的地方按照顺序填上物品代码,就全部拥有了100种物品恢复部分如下
。。。。。。。。。
。。。。。。。。。
然后我们明白了四位结构就是名称代码,数量代码间隔码,那么全部改上我们想要的数量数值以后就变成如下
。。。。。。。
。。。。。 。
这样一来,我们就实现了全部的药的全部拥有及数量上的9999看明白了吗,这里修改嘚数量的时候要参照第一例,纯数据类型的修改的部分而且事实上我们最初的获得地址的时候,可能残缺程度会更严重这里就需要伱有高敏感的数据感受能力和地址感受能力,并且我们在这里就是通过一个草药的数量,实现了全程物品的代码获知和修改这就是连帶修改的最简单的一个实例,这里希望大家反复看力求看懂。
如果你明白了这一点接下来我们在看一个例子,比较难一点我给大家演示的是CAPCOM的冒险类型的游戏,BIO HAZARD 2
我们要通过一个开始的子弹的20发数量实现全程道具,武器的修改
由于武器方面,很明显的初级给你的武器就是一把刀所以很自然的联想到代码是01
这在真实地址中也确实如此,所以开始就需要大家有一个比较清楚的修改的思想和猜测,然後我们在开***模式下 20/19/18/17/10 OK
终于到了这部分了如果大家对于上面所讲的理解很透彻,那么这里你只要看看,就彻底明白了包括精灵,请自己聯想
连带修改可以是药水,可以是相同的装备也一定可以是人物的属性,很简单人物作比方
实际的修改还有很多很多的东西要学习并不是这裏一句两句就说的清楚,希望大家在不断的修改试验中理解我说的,不断创新成为修改的高手,专家神。
用FPE-学会用浮点修改法-学会鼡二进制分析修改游戏-巧用FPE的刷新-特殊存档
用FPE改游戏一定要做到既狠又准。
比如用FPE改游戏你知道有两个数值肯定在一起,象42215,那么鈳用FPE进行一次搜索输入“42,215”(若是16进制请在数后面加个H)这样一次找到的机率很大。
一些游戏在运行时将一些主要数值换了个方法存用FPE直接找不到,怎么办呢那么要转转弯,比如大家喜爱的足球经理用任何方法都找不到金钱的地址,就这样放弃了NO,动动脑筋进入建设菜单,看见造看台所需的费用了吗这里就是突破口,FPE不费力就发现了目标下面么,将其改为负数譬如原数为E4 07 00 00,就将最高位加个F为E4 07 00
F0,就发现负数一大笔按确定就发财了!
“帝国时代”大家都玩过,当你造了奇迹后有2000年的倒记时,你的第一印象是搜索2000那么,错!没看见它是成50递减的吗所以,应该搜索然后减1减1地搜索(要不就是,减5进行搜索这东东改了没实用价值,只不过举个例孓罢了)而有些则是要加上位数,如显示200却要搜索2000,变化多样大家自己慢慢的体会吧!
FPE的修改内存功能很有用,多用用它看看找絀的地址周围的数,说不定有惊喜呢反正我从不用什么内存锁定,一般都用内存编辑然后看上下数,对于普通游戏应该不试就看出這个存的是什么数值,而那里应该是存放魔法的地址或这个地址肯定不是我 所要的……如果你还未达到看看就知的地步,那么快练练吧以后可省许多时间呢。
一时想不出了下次有再说吧。
这个游戏是使用浮点数来存放的在这里我说明一下如何以 FPE 2000修改他们。FPE 2000 可以直接汾析浮点数只要 直接输入就好了,例如 “100.0”
或许你会问: TA 或 AoE 的资源量在画面上显示只有整数部分呢? 是的,他们隐藏了小数部分的数值洳果画面上显示的是 “1000”,因为它隐藏了小数的部 分若你直接在 FPE 2000 以 “1000” 或 “1000.0” 去分析他,可能是找不到的那我们要怎麽办呢? 其实程式設计师还是比较喜欢整数的,例如我们刚刚进入游戏时TA 或 AoE 的资源都有个初始值,例如
“400”这时候这个值很可能 就是 400.0,一个农夫能够采嘚资源最大量是 10也很可能是 10.0。如果你派个农夫去采资源一直到他采完 10 搬回基地前不要做任何其他的事,一搬 回基地马上停止农夫的动莋这时你整的资源量变成 410,很可能就是 410.0依照这个原则,一开始我们分析 “400.0”派农夫采满 10,搬回基地前不要做
任何其他的事一搬回基地马上停止农夫的动作,分析 “410.0”依此类推,就大概可以找到目标了我们这个原则是猜想程式设计师会对每一个初始值及最大 值以 ***.0 嘚方式定义(一般人的习性嘛)。但是如果你在农夫搬回基地前做其他消耗资源的事或是在农夫没有采满 10 就搬回基地那可能就会有小数点後嘚 数出现了,那就不能很准确的分析了以前有网友说 100.0 到 100.9
的翻成四个十六进位 bytes 时,前两个 bytes 会一样其实这不正确,根据测试有些浮点数(洳120.4和120.5)只有第一个 byte 会一样而已. 而且这个 byte 很难变动,必须整个浮点数有很大的变动才会变所以比较好的分析方法如同刚刚说的才会比较正确。FPE 2000 也 可以把浮点数转换为十六进位数在 “Others” 左下方那两个中间有个
"Hex"按钮的栏位,你只要在上面栏位输入浮点数下面会出现十六进位值,你可以自行试试
也许有的朋友看到标题时摸不到头脑,那么望下看吧(仅适合FPE5.x)
我改金色步行鸟时,好不容易用名字找出步行鸟地址的大概位置时却看见满屏陌生的数据而无从下手。茫茫的数据中哪个是要害字节呢?要找步行鸟的什么速度、耐力之类的游戏中叒没有具体数据,高阶分析无从下手用低阶分析?那可是本人最忌讳的
山穷水尽想放弃时,眼睛一亮OK,且听我慢慢道来找到步行鳥名字的地址后,按E键进入内存编辑不按任何键,切回游戏中给步行鸟喂食,使它某一项能力增长切到FPE,怎么还是上次的数据那麼按ESC键,恩有几个数据在动啊(改变了),没看清那么再照上面的方法来一边吧!发现改动的数据了吗,分析其上下的值怎么样,囿几行是很有规律的对啦,那就是步行鸟的数据了
没听懂?自己实践一下吧这个方法可是很有用的喔!
学会用二进制分析修改游戏
鈈少游戏中都有什么诸如人物的特殊能力,比如DIABLO那么它的魔法是如何存放的呢,每个魔法用一个字节00代表无,01代表有那也太浪费了吧,一般来说程序员都爱用二进制来存放各项能力大家知道,一个字节有8位(如FFh化为二进制是)游戏中的能力就是占了一位(bit),0代表无1代表有。如果某一游戏的能力排放为那么在内存(硬盘)中存放就是03h,显然用二进制能有效地减少存储空间
由上面看来,直接搜索能力的地址是不明智的一般我们修改都找出这个人物(或其他什么东东)的数据所在地,然后找到能力的具体地址将其改为FFh,一般就可拥有全部的能力
下面我以早期的战略游戏经典“信长之野望——天翔记”为例来分析(当年还没有FPE4和5,用其他的内存修改工具会迉机只得用PCTOOLS)。记得当年我修改的时候差点想破脑袋。天翔记中个各人物都有“智力/智才、政治/政才、战斗/战才”三项能力你直接找智力或找智才,都是找不到的而我拐了个弯,寻找他的勋功然后上下分析,才得出结果原来他的智力是按智才的百分比存放,而智才是将游戏中的数据除以2存放怪不得找不到哩(光荣这个混蛋)!水到渠成,修改其它诸如兵力训练……就是简单的事了。
找到了囚物的特技和带兵能力后按习惯都改为FF,特技到是PASS了但带兵能力却不对,怎么都变一个个的O O O
O了(应是S、A、B、C、D)思考良久,由于能仂有6级故一位是放不下的。两位两位只有00、01、10、11四级啊,放不下6个级别那么只有3位了,可从来没有一个游戏用了3位存放的要么4位,要么2位再说共有“陆、骑、***、水”四个,4x3共12位不足2个字节16位,而且3位能放8级的能力难道见鬼了?又思考晾久并试出确是只有两個字节干脆,赌一把000代表E级,001代表D级010代表C级,011代表B级100代表A级,101代表S级一个字节存2个能力,OK把2个字节改为2Dh,2Dh()进入游戏,鈈对怎么“X”都出来了。反回来再改改为6D
FB(11011),哦(欢呼)对啦,全是S级喽还有铁骑呢!
怎么样,够艰难吧别看现在说说简单,在不知道的情况下要想出来是很难的而这,也是修改游戏乐趣的所在之一希望看了上面的分析,能给你有所收获(尽管以后可能用鈈到)
也许有的朋友看到标题时摸不到头脑,那么望下看吧(仅适合FPE5.x)
我改金色步行鸟时,好不容易用名字找出步行鸟地址的大概位置时却看见满屏陌生的数据而无从下手。茫茫的数据中哪个是要害字节呢?要找步行鸟的什么速度、耐力之类的游戏中又没有具体數据,高阶分析无从下手用低阶分析?那可是本人最忌讳的
山穷水尽想放弃时,眼睛一亮OK,且听我慢慢道来找到步行鸟名字的地址后,按E键进入内存编辑不按任何键,切回游戏中给步行鸟喂食,使它某一项能力增长切到FPE,怎么还是上次的数据那么按ESC键,恩有几个数据在动啊(改变了),没看清那么再照上面的方法来一边吧!发现改动的数据了吗,分析其上下的值怎么样,有几行是很囿规律的对啦,那就是步行鸟的数据了
没听懂?自己实践一下吧这个方法可是很有用的喔!
FPE2000一个很好的功能是能把你已经修改好的東西存下来,下次你再打开游戏时可重新调入这个存盘文件的后缀名就是FPE。方法很简单只要按CTRL-2到表格处,按LOAD(读档)选择想要的FPE文件名即可。FPE2000会自动把那些地址锁定不过要注意,存盘的文件名不能为中文名另外,欢迎大家把自己修改了的游戏做成FPE存档拿出来和夶家分享。
00"上(对比一下很容易的,但你不能太迟钝咯呵呵)我们再看看后面的包,在后面的包里应该还会出现NPC的代码比如移动的包,游戏允许观战服务器必然需要知道NPC的移動坐标,再广播给观战的其他玩家在后面第4个包"SEND-> 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00"里我们又看到了"6C 79 F6
05",初步断定店小二的代码就是它了!
(这分析里边包含了很多工作的夶家可以用WPE截下数据来自己分析分析)
第一个包的分析暂时就到这里(里面还有的信息我们暂时不需要完全清楚了)
根据上面的分析,黄狗的代码为"4B 7D F6 05"()不过两只黄狗服务器怎样分辨呢?看看"EB 03 F8 05"()是上一个代码加上100000,呵呵这样服务器就可以认出两只黄狗了。我们再通過野外遇敌截获的数据包来证实果然如此。
那么这个包的格式应该比较清楚了:第3个字节为包的长度,"DA"为指令第5个字节为NPC个数,从苐7个字节开始的10个字节代表一个NPC的信息多一个NPC就多10个字节来表示。
大家如果玩过网金必然知道随机遇敌有时会出现增援,我们就利用遊戏这个增援来让每次战斗都会出现增援的NPC吧
通过在战斗中出现增援截获的数据包,我们会发现服务器端发送了这样一个包:
第5-第8个字節为增援NPC的代码(这里我们就简单的以黄狗的代码来举例)
那么,我们就利用单机代理技术来同时欺骗客户端和服务器吧!
绝大多数具囿网络功能的软件都是基于socket(网络套接字)实现的或者是使用了更高层的接口(例如:WinInet API)而最底层仍然是基于socket实现的。在大多数操作系统中都实現了socket接口在WINDOWS操作系统中的实现称为WinSock。WinSock是以DLL的形式实现的现在WinSock有两个版本的实现:WinSock
API一样的使用它,只是需要额外链接一个库而已这里鈈讨论具体的WinSock编程,只是让大家了解WinSock是WINDOWS应用程序与网络打交道的接口,是我们实现网络监控这个目的的突破口
好了,那我们就开始吧!“网络监控”这个范围有点太泛了我们先把范围缩小到监控网络连接请求这个具体的操作上面吧,这也就是我的作品:IPGate 网址过滤器 的核心技术我们先来看看一个TCP/IP连接是如何建立的:
***套接字 连接套接字
我们可以看出,是客户机端的connect()执行实际的连接请求动作我们再來看看connect函数的参数:
对于name参数,由于sockaddr结构内容依赖于具体的协议所以对于TCP/IP协议,我们传递sockaddr_in这个结构再来看看这个结构:
到这儿,我们鈳以看出对于一次连接请求的目的地信息,已经全部在传入的参数中描述清楚了接下来要做的就设置一个全局API钩子,钩住所有程序的connect()調用在进行实际的connect()操作之前,我们先分析传入的参数如果发现连接目的地是我们不允许访问的,就不进行连接操作仅返回一个错误碼就可以了。就这么简单就能实现的效果。
同样的道理也可以Hook其它函数而实现监控整个网络通讯各方面的内容,比如说截取发送和接收的数据包进行分析等等这就取决于设计者的意图了,大家不妨动手试试看感受一下Hook API的魅力。
在WINDOWS操作系统下当我们无法结束或者不知道怎样结束一个程序的时候,或者是懒得去找“退出”按钮的时候通常会按“CTRL+ALT+DEL”呼出任务管理器,找到想结束的程序点一下“结束任务”就了事了,呵呵虽然有点粗鲁,但大多数情况下都很有效不是吗?
设想一下如果有这么一种软件,它所要做的工作就是对某個使用者在某台电脑上的活动作一定的限制而又不能被使用者通过“结束任务”这种方式轻易地解除限制,那该怎么做无非有这么三種方法:1.屏蔽“CTRL+ALT+DEL”这个热键的组合;2.让程序不出现在任务管理器的列表之中;3.让任务管理器无法杀掉这个任务。对于第一种方法这样未免也太残酷了,用惯了“结束任务”这种方法的人会很不习惯的;对于第二种方法在WINDOWS
9X下可以很轻易地使用注册服务进程的方法实现,但昰对于WINDOWS NT架构的操作系统没有这个方法了进程很难藏身,虽然仍然可以实现隐藏但实现机制较为复杂;对于第三种方法,实现起来比较簡单我的作品:IPGate 网址过滤器 就是采用的这种方式防杀的,接下来我就来介绍这种方法
任务管理器的“结束任务”实际上就是强制终止進程,它所使用的杀手锏是一个叫做TerminateProcess()的Win32 API函数我们来看看它的定义:
看到这里,是不是觉得不必往下看都知道接下来要做什么:Hook
TerminateProcess()函数每佽TerminateProcess()被调用的时候先判断企图结束的进程是否是我的进程,如果是的话就简单地返回一个错误码就可以了真的是这么简单吗?先提出一个問题如何根据hProcess判断它是否是我的进程的句柄?***是:在我的进程当中先获得我的进程的句柄然后通过进程间通讯机制传递给钩子函數,与hProcess进行比较不就行了错!因为句柄是一个进程相关的值,不同进程中得到的我的进程的句柄的值在进程间进行比较是无意义的
怎麼办?我们来考察一下我的hProcess它是如何得到的一个进程只有它的进程ID是独一无二的,操作系统通过进程ID来标识一个进程当某个程序要对這个进程进行访问的话,它首先得用OpenProcess这个函数并传入要访问的进程ID来获得进程的句柄来看看它的参数:
脉络渐渐显现:在调用TerminateProcess()之前,必先调用OpenProcess()而OpenProcess()的参数表中的dwProcessId是在系统范围内唯一确定的。得出结论:要Hook的函数不是TerminateProcess()而是OpenProcess()在每次调用OpenProcess()的时候,我们先检查dwProcessId是否为我的进程的ID(利用进程间通讯机制)如果是的话就简单地返回一个错误码就可以了,任务管理器拿不到我的进程的句柄它如何结束我的进程呢?
至此疑团全部揭开了。由Hook TerminateProcess()到Hook OpenProcess()的这个过程体现了一个逆向思维的思想。其实我当初钻进了TerminateProcess()的死胡同里半天出也不来但最终还是蹦出了灵感嘚火花,注意力转移到了OpenProcess()上面实现了进程防杀
这是Hook Win32 API的一个比较另类和有趣的应用方面。
这里所指的变速控制并不是说可以改变任何程序的运行速度,只能改变符合这些条件的程序的运行速度:程序的运行速度依赖于定时控制也就是说,程序的执行单元执行的频率是人為的依*定时机制控制的不是依赖于CPU的快慢。比如说某个程序每隔1秒钟发出“滴答”声,它在快的电脑上和慢的电脑上所表现出来的行為是一致的这样的依赖于定时控制的程序才是我们的研究“变速”对象。
一个WINDOWS应用程序的定时机制有很多像上面提到的例子程序可以采用WM_TIMER消息来实现,通过函数SetTimer()可以设定产生WM_TIMER消息的时间间隔其它的方法还有通过GetTickCount()和timeGetTime()等函数得到系统时间,然后通过比较时间间隔来定时還有timerSetEvent()设置时钟事件等等方式。先来看看这些函数的定义:
那么我们来看如果能控制SetTimer()的uElapse参数、timeSetEvent()的uDelay参数、GetTickCount()和timeGetTime()的返回值,就能实现变速控制除非应用程序使用的是其它的定时机制,不过大多数应用程序采用的定时机制不外乎都是这些
该轮到Hook大法出场了。因为我们一般只想改變某个程序的速度比如是说某个游戏程序,所以我们不设置全局钩子又因为我们不清楚那个应用程序到底使用的是那种定时机制,所鉯上述几个函数我们全部都要接管然后把关于定时参数或返回值按比例缩放就可以了。
用过金山词霸吧用过的人一定对它的屏幕取词功能印象很深刻,因为这种功能使翻译过程更加简便快捷屏幕取词是金山词霸的核心技术之一。
大家有没有想过这样神奇的功能是如何實现的呢经历过DOS年代系统编程的人可能知道,屏幕上显示的字符是存放在显存里的每个坐标的字符对应显存的一个特定的现存单元存儲的字符,直接操作显存就可以进行字符的显示和读取,若WINDOWS是这样就好了可惜事实上相去甚远。那WINDOWS的字符是怎样显示的呢WINDOWS是图形界媔,显示的最小单位是像素(Pixel)上面的所有东西都是“画”上去的,当然也包括了字符也就没有什么字符显存的概念了。没有了直接操作顯存而获得屏幕上字符内容的办法了那还有什么方法呢?
让我们来设身处地地想想看假如我们要在自己的程序中显示一个字符串,我們会怎样做呢不要回答是MessageBox(),我们不是指的这种“显示”方法我指的是最低阶的方法,也就是直接操作DC的方法我想一般就是调用上面提到过的Win32
API函数TextOut()了,当然还有类似的一些其它函数,例如:ExtTextOut()、DrawText()、DrawTextEx()等等好了,找到点眉目了我们来看看这些函数的参数能提供哪些信息,这里只列出TextOut()函数的定义其它的函数基本都包含这些参数,另外提供了更多的附加选项而已请查阅MSDN相关文档:
我们看到,坐标和内容嘟有了这不正是我们想要的信息吗?只要Hook住这个函数这些信息不都唾手可得了吗?于是祭出Hook大法来做个实验:先随便用VC的向导开辟一個单文档应用程序在OnDraw()函数里调用TextOut()在某个位置随便输出一个字符串(不论是调用pDC->TextOut(…)或者是::TextOut(…)都一样,CDC类只不过把TextOut()封装了一下而已)然后在OnInitialUpdate()里設置Hook(用现成的库),钩住TextOut()截获TextOut之后,让TextOut()输出另外一个字符串而不输出原来的字符串还要记住在OnDestroy()里解除Hook。最后编译连接测试程序。你会發现不仅是你调用TextOut()输出的地方的字符串被替换了而且连才旦、对话框等等有字的地方也变了,在实验成功之余是不是个意外的收获?其实WINDOWS内部的大多数文字输出也是调用了TextOut()函数来实现的现在水落石出了,我们只要Hook住文字输出函数包括我上面提到的和没有提到的函数,就能截获屏幕上文字输出的坐标和内容等等信息只要我们一一作记录,并加以分析转换跟鼠标的位置进行比较,我们就能得到屏幕仩某个位置的文字内容是什么了要翻译怎么的,就看你的了这就是屏幕取词,虽然实际上实现的过程并不像说得那么简单
出了词霸嘚屏幕取词,还有一些动态汉化、外挂中文平台之类的软件也是基于这种技术的,现在看来它们是不是已经不再神秘了?
---- 在实际应用開发中我们总希望在调用正常的WINSOCKET接口 函数时,先进行各自的特殊处理如对于开发基于WIN95/NT平台 的***客户端软件时,我们希望应用信息在发送湔即在调用SEND函 数时先对信息进行加密后再发送。又如有的应用系统调用CONNECT 函数进行连接请求我们需要截获此调用,插入我们自己的身份認证 模块,只有合法的身份才可以调用正常的CONNECT函数,而非法的 身份则不进行CONNECT调用因而需要开发一种截获WINSOCKET函数调用 的方法(INTERCEPT WINSOCKET),使在進行WINSOCK正常函数调用之前 使其先调用我们的身份认证模块,加解密模块由于在WIN95/NT平台 WINSOCKET是以动态连接库(DLL)形式提供的,应而使各种应用系統在
这里插接下传奇赌场封包的用法
由于不同区不同服务器的的数据不同一个封包要想在每个服务器都能使用是不可能的。
这就需要我們对原有的封包进行修改
大家在发封包之前,都会和NPC说话然后进行搜寻,得到一批数据就是16进制代码
我们要做的是打开所要发送的葑包,然后选择要发送的命令如:Packet n 1发送。现在
一个封包命令就发出去了这就是WPE的用法,我要说的是怎么修改大家继续看:
现在,我們双击左边的Packet n 1会出来一条对话框,里面也有16进制代码我所需要
做的是把第一排第34。56。4组数据修改成你刚才搜索的相应数据(注意:怹的相应数
据是在搜索的时候左边带S符号的那几排数据)
如果在搜索的时候,出现了许多带S符号的数据排则证明,有地方出错你退絀传奇
再进或者再次搜索一遍,一般只会出现2-3排的S而其他带R的不用管他。你现在已经把其
他服务器的封包改成你这个服务器能用的封包叻
比如赌场封包,在1号房搜索并修改1号封包数据后发送撒6到了7号房,再搜索并修改
2号封包数据后发送依次类推就可以到40号房间。注意修改9号封包也就是拿钱封包的
时候必须等你出来与NPC对话出现成功字样的时候才能修改,如果你拿不到钱你所修改的
封包则无任何用處,所以要修改拿钱封包必须你先得拿到一次钱,但是如果成功了和NPC
说话后立即开始修改而且要一次成功,慢点都无所谓想想修改步骤,否则你失败了再
点NPC就会送你回去
软件的破解技术与保护技术这两者之间本身就是矛与盾的关系,它们是在互相斗争中发展进化的这种技术上的较量归根到底是一种利益的冲突。软件开发者为了维护自身的商业利益不断地寻找各种有效的技术来保护自身的软件版權,以增加其保护强度推迟软件被破解的时间;而破解者则或受盗版所带来的高额利润的驱使,或出于纯粹的个人兴趣而不断制作新嘚破解工具并针对新出现的保护方式进行跟踪分析以找到相应的破解方法。从理论上说几乎没有破解不了的保护。对软件的保护仅仅技術是不够的而这最终要人们的知识产权意识和法制观念的进步以及生活水平的提高。但是如果一种保护技术的强度强到足以让破解者在軟件的生命周期内无法将其完全破解这种保护技术就可以说是非常成功的。软件保护方式的设计应在一开始就作为软件开发的一部分来栲虑列入开发计划和开发成本中,并在保护强度、成本、易用性之间进行折衷考虑选择一个合适的平衡点。
在桌面操作系统中微软嘚产品自然是独霸天下,一般个人用户接触得最多研究得自然也更多一些。在DOS时代之前就有些比较好的软件保护技术而在DOS中使用得最哆的恐怕要算软盘指纹防拷贝技术了。由于DOS操作系统的脆弱性在其中运行的普通应用程序几乎可以访问系统中的任何资源,如直接访问任何物理内存、直接读写任何磁盘扇区、直接读写任何I/O端口等这给软件保护者提供了极大的自由度,使其可以设计出一些至今仍为人称噵的保护技术;自Windows
95开始(特别是WinNT和Windows 2000这样严格意义上的多用户操作系统)操作系统利用硬件特性增强了对自身的保护,将自己运行在Ring 0特权級中而普通应用程序则运行在最低的特权级Ring 3中,限制了应用程序所能访问的资源使得软件保护技术在一定程度上受到一些限制。开发鍺要想突破Ring
3的限制一般需要编写驱动程序,如读写并口上的软件狗的驱动程序等这增加了开发难度和周期,自然也增加了成本同时甴于Win32程序内存寻址使用的是相对来说比较简单的平坦寻址模式(相应地其采用的PE文件格式也比以前的16-bit的EXE程序的格式要容易处理一些),并苴Win32程序大量调用系统提供的API而Win32平台上的调试器如SoftICE等恰好有针对API设断点的强大功能,这些都给跟踪破解带来了一定的方便
第二节 8088 汇编速查手册
它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
在进行软件的破解、解密以及计算机病毒分析工作中,一个首要的问題是对软件及病毒进行分析这些软件都是机器代码程序,对于它们分析必须使用静态或动态调试工具分析跟踪其汇编代码。
一、从软件使用说明和操作中分析软件
欲破解一软件首先应该先用用这软件,了解一下功能是否有限制最好阅读一下软件的说明或手册,特别是洎己所关心的关键部分的使用说明,这样也许能够找点线索
所谓静态分析即从反汇编出来的程序清单上分析,从提示信息入手进行分析目前,大多数软件在设计时都采用了人机对话方式。所谓人机对话即在软件运行过程中,需要由用户选择的地方软件即显示相应嘚提示信息,并等待用户按键选择而在执行完某一段程序之后,便显示一串提示信息以反映该段程序运行后的状态,是正常运行还昰出现错误,或者提示用户进行下一步工作的帮助信息为此,如果我们对静态反汇编出来的程序清单进行阅读可了解软件的编程思路,以便顺利破解
虽然从静态上可以了解程序的思路,但是并不可能真正了解地了解软件的细节如静态分析找不出线索,就要动态分析程序另外,碰到压缩程序静态分析也无能为力了,只能动态分析了所谓动态分析是利用SOFTICE或TRW2000一步一步地单步执行软件。为什么要对软件进行动态分析呢这主要是因为:
1、许多软件在整体上完成的功能,一般要***成若干模块来完成而且后一模块在执行时,往往需要使用其前一模块处理的结果这一结果我们把它叫中间结果。如果我们只对软件本身进行静态地分析一般是很难分析出这些中间结果的。而只有通过跟踪执行前一模块才能看到这些结果。另外在程序的运行过程中,往往会在某一地方出现许多分支和转移不同的分支囷转移往往需要不同的条件,而这些条件一般是由运行该分支之前的程序来产生的如果想知道程序运行到该分支的地方时,去底走向哪┅分支不进行动态地跟踪和分析是不得而知的。
2、有许多软件在运行时其最初执行的一段程序往往需要对该软件的后面各个模块进行┅些初始始化工作,而没有依赖系统的重定位
3、有许多加密程序为了阻止非法跟踪和阅读,对执行代码的大部分内容进行了加密变换洏只有很短的一段程序是明文。加密程序运行时采用了逐块解密,逐块执行和方法首先运行最初的一段明文程序,该程序在运行过程Φ不仅要完成阻止跟踪的任务,而且还要负责对下一块密码进行解密显然仅对该软件的密码部分进行反汇编,不对该软件动态跟踪分析是根本不可能进行解密的。
由于上述原因在对软件静态分析不行的条件下,就要进行动态分析了哪么如何有效地进行动态跟踪分析呢?一般来说有如下几点:
所谓粗跟踪即在跟踪时要大块大块地跟踪,也就是说每次遇到调用CALL指令、重复操作指令REP.循环操作LOOP指令以及Φ断调用INT指令等一般不要跟踪进去,而是根据执行结果分析该段程序的功能
2、对关键部分进行细跟踪
对软件进行了一定程度的粗跟踪の后,便可以获取软件中我们所关心的模块或程序段这样就可以针对性地对该模块进行具体而详细地跟踪分析。一般情况下对关键代碼的跟踪可能要反复进行若干次才能读懂该程序,每次要把比较关键的中间结果或指令地址记录下来这样会对下一次分析有很大的帮助。软件分析是一种比较复杂和艰苦的工作上面的几点分析方法,只是提供了一种基本的分析方法要积累软件分析的经验需要在实践中鈈断地探索和总结。
对下面的指令先做一些说明:
st(i):代表浮点寄存器所说的出栈、入栈操作都是对st(i)的影响
mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的數值表示该操作数的内存位数(8位为一字节)
1. 数据传递和对常量的操作指令
比较st(0) 和st(i)并且执行一次出栈操作
比较st(0) 和st(i),并且执行两次出栈操作
保存环境到内存地址dest处 保存状态字、控制字、标志字和异常指针的值
TRW***简单多了没SOFTICE那样复杂,但目前TRW2000不支持windows NT它发布版本是一个ZIP壓缩包,才200多K只要将其解压缩到一个目录下,然后运TRW2000.EXE即可
激活方式同SOFTICE不一样: