精华内容
下载资源
问答
  • CE+OD基址详解

    2014-12-07 23:33:23
    CE+OD基址详解 你懂的 带图文 很详细
  • CE找基址,非常详细,CE找基址,非常详细CE找基址,非常详细CE找基址,非常详细CE找基址,非常详细
  • OD 内存工具 破解工具 基址查询 偏移查询
  • OD查看游戏野怪的基址,直接用现在的网游进行教学,通俗易懂,非常好的OD教学视频
  • 逆向工程__某游戏基址查找过程

    万次阅读 2015-09-19 12:49:10
    某游戏基址查找过程  今天闲来无事,好久没有逆软件了,本来用CE想找个基址来写个外挂玩玩,结果发现这个是一个数组,而且跳跃次数也比较多,较为麻烦,没办法,只有祭出我的大杀器OD来办它。过程如下: //----...
    某游戏基址查找过程
         今天闲来无事,好久没有逆软件了,本来用CE想找个基址来写个外挂玩玩,结果发现这个是一个数组,而且跳跃次数也比较多,较为麻烦,没办法,只有祭出我的大杀器OD来办它。过程如下:

    //------------------------------CE里面看到的数据:---------------------------//
    EAX=0000005A
    EBX=00000008
    ECX=7383B178
    EDX=FFFFFFFB
    ESI=7383B2CC
    EDI=0000005A
    EBP=7383AB24
    ESP=0018F66C
    EIP=0043FDCC

    可能的基址指针 =7383B2CC

    0043FDBC - jl 0043FEA1
    0043FDC2 - cmp ebx,07
    0043FDC5 - mov [esi+ebx*4+000000CC],edi
    0043FDCC - jne 0043FE1C
    0043FDCE - push 00
    //--------------------------------------------------------------------------------------//
    //------------------------------------从这里开始用OD了----------------------------------------//
    1,0043FDAE    8DB1 54010000   lea esi,dword ptr ds:[ecx+0x154]
    开始找esi,目前的偏移是4*ebx+0xCC = 0xEC

    2,发现esi被[ecx + 0x154]赋值,接着找exc的值,此时的偏移是0x240

    3,0043FED3    8BCE            mov ecx,esi
    ecx是被esi赋值的,接着找上面的esi


    4,0043FEC6    8BF1            mov esi,ecx
    回过头esi,又是被ecx赋值的。。。真烦人,继续找ecx,fuck,发现上面没有push ecx,明显是thiscall的调用约定,ecx在这个子函数
    的外面。


    5.0047A360    8BCE            mov ecx,esi
    疯了。。。ecx又被esi赋值了。。。


    6.0047A297    8DB5 54060000   lea esi,dword ptr ss:[ebp+0x654]
    esi是被[ebp+0x654]的值赋值的,所以接下来是找ebp,偏移是ebp+894

    7.0047A26B    8D2C88          lea ebp,dword ptr ds:[eax+ecx*4]
    发现是ebp是由[eax+ecx*4]赋值的,在这里看一下ecx的值,再找eax的值,发现eax是上面call的返回值,故进入函数体
    ecx = 84F,故此时的偏移是29D0

    8.004406CA    A1 28148E00     mov eax,dword ptr ds:[0x8E1428]
    进入函数体里面后,终于发现了基址0x8E1428 + 0x29D0

    最后归纳一下整个基址的详细变化过程:基址:0x8E1428 + 0x84F * 4 + 0x654 + 0x154 + 4 * 0x8 + 0xCC 根据规律找各人物之间的关系吧,肯定是0*XXX,1*XXX.

    最后验证,多次重启游戏后,发现血量是正常能拿到的。
    图片
    展开全文
  • 基址必备工具CE和OD

    2015-09-14 20:50:30
    这两个工具分别是CE6.4中文版和OD,免安装。两个都没做免杀,我正常使用的。因OD的原因,被检测病毒是正常的,如果不放心,可以用虚拟机来使用。
  • OD模糊查找特征码

    千次阅读 2019-07-05 01:51:32
    为了更新数据,我们常常需要搜索特征码,但是OD里不能直接查找模糊数据.近两天通过看壳的世界(前两课免费),我发现其实还是可以实现的,只是以前太粗心不会用.比如我们搜索如下语句:内存地址 二进制 汇编指令 备注00735...

    为了更新数据,我们常常需要搜索特征码,但是OD里不能直接查找模糊数据.
    近两天通过看壳的世界(前两课免费),我发现其实还是可以实现的,只是以前太粗心不会用.

    比如我们搜索如下语句:
    内存地址    二进制          汇编指令            备注
    00735EC3    33C0            XOR EAX,EAX  //这条确定
    00735EC5    83FF 1A         CMP EDI,1A  //不确定
    00735EC8    0F95C0          SETNE AL  //确定
    00735ECB    83C0 03         ADD EAX,3  //不确定
    00735ECE    8BE8            MOV EBP,EAX  //确定


    具体是按CTRL+B,也就是二进制搜索
    那么我们将确定的二进制码打进去,然后不确定的用??来代替
    原有
    33C083FF1A0F95C083C0038BE8
    模糊
    33C0??????0F95C0??????8BE8


    这样就可以查找出来了,简单吧.

    好了这点不足说的技巧就说到这里,可能有的人早就知道了,
    但是我确是今天才知道的,不敢藏着拿出来与还不知道的人分享一下.

    转载于:https://www.cnblogs.com/rogee/archive/2011/02/01/1948722.html

    展开全文
  • 通过OD死码写出找游戏程序基址.游戏更新找基址是不是很麻烦,自己写个找基址程序呗,不要每星期都找得手忙脚乱。
  • 如何找基址,原理是什么

    万次阅读 多人点赞 2018-01-14 16:07:20
    CE (cheat engine)修改数值来作弊是一种很大众化的游戏作弊方式了。 尤其是CE设计的很人性化,几乎不需要任何专业知识就能用。 但是有一个问题就是,每次开游戏或者有什么...有很多教人怎么找基址的教程,基本上都

    CE (cheat engine)修改数值来作弊是一种很大众化的游戏作弊方式了。

    尤其是CE设计的很人性化,几乎不需要任何专业知识就能用。

    但是有一个问题就是,每次开游戏或者有什么变化,就要重新找内存地址。

    小时候没学过编程,但是经常在网上逛,看别人怎么作弊。经常有人提到“基址”这个词。它就是用来解决上面那个问题的关键。如何找基址是写作弊器的核心部分。

    有很多教人怎么找基址的教程,基本上都是一步一步,很详细的教怎么做,但是都没有讲为什么。

    (废话。。受众都是小时候的我那样的,不懂编程,就想着作弊爽一把的人,讲了原理也看不懂,直接讲怎么做就行了)


    现在我是正儿八经程序员了,再回过头看如何找基址,大概知道原理是什么了。


    一般来说,先要找到一个内存地址,比如说你通过不断增大减小金钱,用CE搜,搜出来了代表金钱的内存地址。这个地址我们称之为 目标地址 (我瞎起的名字)。 目标地址是会变化的,每次重开游戏,甚至换个角色,换个地图,都有可能变。

    所以它的可用性不强。我们需要的是一个稳定的访问方式,这个东西就是基址。

    让我们从写游戏的程序员角度来思考,程序里面需要一个地方放金钱。

    假设这个游戏是C/C++写的。(一般来说都是这样的,就算不是,一般来说其他语言的底层细节和C是类似的)

    最简单的情况:

    比如说一个非常简单的小游戏,可能它的金钱直接就是个全局变量。因为这是一个C/C++写的游戏,全局变量的位置应该是固定的。当一个程序被加载后,其映像地址被确定,比如说现在的windows,可执行文件的加载地址一般是 (囧,忘了)。 然后该全局变量就在相对于这个映像地址的某个偏移处,这个偏移是固定的。这种情况,我们在CE搜到的直接就是不变的地址了。


    如果是另一种情况:

    假设这个游戏有一堆全局变量,写游戏的程序员看着这一堆全局变量很发愁。他决定把代码重构一下。把所有的全局变量整合到一个结构体里面,比如说原来是 血,蓝,金钱 都直接裸体放在全局。现在搞了一个struct,把血,蓝,金钱,都弄到结构体里面,当成员。然后全局放一个这个struct的实例。这样的话,因为这个实例是全局的,它的地址不变,然后金钱在struct内的偏移不变,所以目标地址还是可以直接当基址用。


    但是如果更进一步:

    假如这个struct太大了,程序员决定把它动态分配,也就是说现在全局放了一个指针,指针指向了一片动态分配出来的内存,放着这个struct。现在我们可以知道,指针是全局的,它的地址不变,但是它的内容是变化的(因为是动态分配的),所以我们搜到的目标地址就是变化的了。但是如果我们每次都先找到指针(指针是全局的,它的地址固定),再找指针指向的位置,得到struct,然后金钱在相对于这个struct的固定偏移处,这样一个迂回的方式,就可以保证每次都取到正确金钱地址了。


    基本上其他的都是上面这种指针式的扩展了:

    比如说某游戏采用了 一关一关的 数据结构。每关都会重新搞一块儿内存,但是金钱在这块内存的固定偏移处。这样的话,我们需要找到一个东西指向 关卡 ,然后再加一个固定的偏移。

    再组合一下,可能金钱不在这个关卡结构的固定偏移处,可能关卡内部一个指针,指向一个角色,然后金钱在这个角色的固定偏移处。这就是两重指针。

    当然也可能更复杂。但是总是可以找到一个方式来寻找到目标地址。

    可以这样想,游戏本身肯定需要一个方式来访问金钱。这个方式就是  指针 和 固定地址、固定偏移 的组合。

    并且这个方式是固定的。既然如此,我们就可以用同样的方式来访问金钱。

    (一个相关的问题。以前想过,如果游戏本身加入了随机因素,那么访问方式就不是固定的了。会不会导致我们找不到基址。想了想应该不会。所谓随机,如何随机呢。举个例子,某游戏,在开启时产生一个随机数,然后在一个数组的该随机数偏移处存放金钱。这样我们可以找到存放这个随机数的基址,然后找到存放数组位置的基址,组合起来其实还是 指针和固定地址、固定偏移的组合。只不过这个固定地址(也就是这个随机数)的获得,也需要搞一遍基址。)


    原理就是这样。

    对照网上的教程,给出一些小时候不明白的地方的解释。

    一般来说CE找到目标地址以后,教程里会用CE找,访问此地址的代码。然后找出来一堆。从里面以某种方式选中一项,查看其反汇编。举个例子,假如说金钱放在0x00000018, 然后我们找到的相关反汇编是这样的

    mov eax,[0x00001234]

    mov ebx, [eax+4]     这条执行完毕后ebx=0x00000010

    add [ebx+8],9    金钱增加9

    这里我们就可以看到目标地址0x00000018是怎么来的。 首先访问 0x00001234,得到一个数值,把这个数值+4,当成一个地址,访问这个地址得到一个数值,这个数值是0x00000010。 后面我们发现,把它加8得到目标地址,把目标地址的内容加9,也就是金钱增加9. 

    可以这样想(这是一个猜测),0x00001234是一个全局指针的地址(注意,这个地址是固定的),这个指针指向关卡的数据结构,访问0x1234得到这个指针的内容,也就是关卡的首地址。关卡首地址+4处存放了一个指针。这个指针指向了一个角色的数据结构。访问这个指针得到其内容,也就是角色的首地址。再角色内部+8处存放着金钱。


    这样我们就知道 基址是  [[0x00001234]+4]+8 ,这个基址的内容就是金钱,这个基址本身就是金钱的地址。


    当然这里是我编的例子,一般来说反汇编出来不会这么紧凑的写着所有关键代码。很有可能我们只能看到

    add [ebx+8], 9     ebx=0x00000010

    然后周围都是无关代码。

    这时候教程做法是在CE里再搜 0x00000010。

    为什么要这样呢,我们的目的是找 这个 0x00000010是怎么来的。

    这时候我们会在CE里看到很多地方都存放有0x00000010,以某种方式找到其中一项,查看谁访问了它,再找反汇编。

    这时候我们有可能看到

    mov ebx, [eax+4]     这条执行完毕后ebx=0x00000010, eax=0x00004321

    这就是0x00000010怎么来的。是访问 eax +4 得来的, eax=0x00004321,然后再看0x00004321怎么来的。

    先搜,再看谁访问,我们又找到了

    mov eax,[0x00001234] eax=0x00004321

    这就是0x00004321怎么来的,是访问 0x00001234得来的。这个0x00001234哪来的?。。它就是个固定值

    所以这样我们就找到了基址。

    但是这样有一个很大的缺点。如果像我编的那个很紧凑的例子一样,我们一次性看到了所有相关代码,那自然好。可是如果不是这样(基本上都是这样)。我们就要看某些值是从哪来的。但是关键点就在于,我们是用CE搜的相关值,用CE查的相关代码,谁也不知道是不是驴头不对马嘴,有可能找到的不是同一套访问方式的中间代码和中间值。 这是很有几率的。不过一般来说大量值和中间代码都是类似的,比如说寄存器从eax换成了ecx,但是访问方式还是不变。这就是这个不严谨方式几乎总是能成功的一大部分原因。

    (后记:多用了几次以后发现,OD查反汇编虽然理论上来说是最准的,但太费事了,万一某一条线 路上跟丢了简直崩盘,还会时不时用一个不知道哪里赋值的寄存器的值,真累。。有时候还是直接CE强搜比较方便。)


    另外一个要提醒的是,有的复杂情况可能中间的+4 +8偏移不是固定值,而是 +ecx 这种变量。然后还要查这个ecx哪来的。


    知道了上面这种方式的原理和缺点,就可以知道,上面这种方式完全没必要。最好还是找到目标地址后,看谁访问了,然后直接转到反汇编,看整个上下文,这样保证总是对的。比如说用CE查到目标地址,然后用OD开开,下访问断点,然后看访问的这个东西,如何访问的,就能直接找到一整套的访问方式。


    然后就是看反汇编了。找到底如何访问的。

    这些内容就没必要说了,看各人功力了


    另外,之前我们找到的基址是[[0x00001234]+4]+8,我们的猜测是 0x00001234指向关卡,关卡+4是角色,角色+8是金钱

    那我们就可以去试一试,看一看,说不定角色+12是血,+16是蓝呢?

    说不定关卡+8是关卡名呢?

    另外说一句,一般字符串是C字符串。也就是说是一个指针,指向一个char型数组,以0结尾,查看的时候要注意。

    展开全文
  • 魔鬼作坊OD

    2015-06-22 22:15:44
    有了魔鬼作坊OD妈妈再也不用担心我找不到游戏基址了.
  • 这一节我们利用CE和OD去找到被选中的怪物对象,和怪物列表。从而为后面自动遍历怪物实现自动打怪的外挂做铺垫。当然在这之前我们得了解汇编中数组和列表是怎么定位的。一般是[eax*4+0x0063fedd],这样...
    合肥程序员群:49313181。    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入)
    Q  Q:408365330     E-Mail:egojit@qq.com

    这一节我们利用CE和OD去找到被选中的怪物对象,和怪物列表。从而为后面自动遍历怪物实现自动打怪的外挂做铺垫。当然在这之前我们得了解汇编中数组和列表是怎么定位的。一般是[eax*4+0x0063fedd],这样通过自增通用寄存器eax去实现数组下标。0x0063fedd在这里就是一个基址。因为32位系统的地址是4字节我想这个大家都非常清楚,所以乘以4.废话不多说了,现在开始打开游戏盒CE。并且将游戏进程附加到CE中去。

    选中两者之间的值。输入值1和值0xFFFFFFFF。这是为了过滤掉0值。否则多查询出很多值。同时为了更快速的查询,我将内存扫描选项设置成00010000和7FFEFFFF之间的内存中进程查找。那么大家肯定会问,那如下的内存呢?如果我们要找的值在余下的内存中怎么办??这个绝不用当心,如果对windows操作系统内存比较了解很容易知道,我设置的这个区间真好是windows的用户模式区间。我们的程序都是在这个区间中的。0x00000000至0x0000FFFF是空指针赋值区。主要是用来辅助程序员捕捉空指针赋值。0x80000000至0xFFFFFFFF是内核模式分区,这个空间是2G。在内核模式分区和用户模式分区之间的是64k禁入分区。所以大家毫无当心的在这个内存区间中去查找,肯定能查到我们想要的值。

    第一次查询出的是一个庞大的数字。然后我们将扫描类型改成“未改变的”,然后查询,这样重复几次。然后我们在游戏中去选中一个怪。

    然后将将扫描类型改成“改变的”,在次查询。再选中其它的怪去查询改变的值,这样不停的改变选中的怪去查询,直到查询出几个值,我这里查询出一个值。

    可以看出它的值是65535。当时我没选中任何怪,说明未选中怪的时候这个内存中的值是0000FFFFh(16进制)

    我们已经找出这个被选中怪id存放的地址。

    然后将这个值选中到被选取,右击被选取数据"找出什么访问了这个地址"。弹出一个对话框,可以看到这样一行汇编指令:“004adb43 mov eax,[edi+00001478]”

    我们将这行代码记录下来。这个时候关闭CE,我们需要打开另一个外挂人员和破解人员必备动态调试工具OD。首先来了解下OD工作区:

    1区反汇编代码区,这个区是程序被反汇编器放汇编出的汇编指令。

    2区是寄存器区。这里显示了CPU中的寄存器,我们可以在动态调试的时候查看下寄存器的变化。

    3区是内存注释区

    4区是内存区,这里显示了内存状态。

    5区是栈区,这里会显示程序在调用过程中堆栈的变化。

     

    打开OD并且附加游戏进程。

    然后

    右击转的表达式,然后输入我们记录的那个地址004adb43。跳到访问被选中怪物id存放的地址的汇编指令那个地方。MOV EAX,DWORD PTR DS:[EDI+1478]这样一行代码。就是将被选中怪物的ID放到EAX寄存器。CMP EAX,0FFFF紧接着这行代码。0000FFFF是没有怪物被选中时DS:[EDI+1478]中的值。

    MOV ECX,DWORD PTR DS:[EAX*4+312DF20] 后面的DS:[EAX*4+312DF20]就是汇编中集合的访问方式。312DF20是基址,那么312DF20+0就是这个数组的第一个元素。我们猜测这个数组存放的就是怪物数组。

    我们在OD的命令行中输入dd 0312DF20以堆栈形式转储。我们可以看到一个一个对象地址在这个数组中,这个就是怪物包括玩家的数组。当然有一个熟悉区别它是怪物还是其它对象。

    我们进入这个数组中的第二个对象。右击第二个数组-》数据窗口跟随进入的第二个对象,可以看到+c这个位置就是对象数组下标是1.恭喜我们已经找到对象数组了。同时我们知道只要是放入[eax+00001478]中的id就是被选中怪物。这个就到这里,下一节分析对象属性。

    版权:归博客园和Egojit所有,转载请标明出处。

     

    转载于:https://www.cnblogs.com/egojit/p/3150097.html

    展开全文
  • 1.用OD+CE附加游戏,开局,太阳的数目为150 2.用CE搜索值为150的地址,搜索到多个 3.在游戏里花太阳种一株植物,让太阳数目变化为50 4.用CE再次搜索值为50的地址,结果只有一个:0x1D9DD758 5....
  • CE+OD实例——查找人物包裹信息

    千次阅读 2011-07-29 09:44:45
    要想学会外挂制作先得学会找基址,这里我就做个实例了首先我们用CE来找出是什么指令修改了我们包裹中物品的数量(怎么找我就不说了,不懂的看CCB老大的教程)找到指令是0048F0AB mov dword ptr [ecx+14], edx用OD...
  • (这是边跟代码边记录下来的,也没有整理,可能有些不对的地方请见谅,比如在末尾...,但结果是预期的结果。...再在OD中跟踪这个地址的数据的传递来源,一直找到一个固定的内存地址,根据传递路径得到X坐标的计算公...
  • OD全教程游戏破解

    2012-08-21 10:19:52
    软件破解,反汇编语言。OD教程 好似用OD获取游戏的基址,反汇编语言的入门
  • OD查找喊话CALL的过程

    千次阅读 2008-03-12 09:50:00
    下面是用OD查找的过程: 用OD打开进程以后登录人物跑到一个空地,确保一切正常以后回OD下断(bp send) 测试了一下就算什么都不操作,OD也会每隔几秒断到一次send 乘这个基本固定时间中断的一次结束以后在聊天窗口...
  • 要实现快速查找基址,就需要用到以前保存的关键代码了。 然后在OD中,查找全部序列就可以了 下面给出目前的基址 MOV EAX,DWORD PTR DS:[EDI+EBX*4+0x410] TEST EAX,EAX 007AD091 3B3D E4841B03 CMP EDI...
  • 今天主要讲一下,找微信个人数据的基址,用到的软件有vs2017,OD(主要用来调试程序,找程序内部call的),CE(用来辅助我们找call的,找数据修改数据),DLL注入工具、内存修改工具 这两个我们后边自己实现。...
  • 32位汇编第六讲,OllyDbg逆向植物大战僵尸,快速定位阳光基址 一丶基址,随机基址的理解 首先,全局变量的地址,我们都知道是固定的,是在PE文件中有保存的 但是高版本有了随机基址,那么要怎么解决这个问题,不解决这个...
  • 也是学习逆向没多久,就准备拿植物大战僵尸练练手,发现很多教学视频都只是教你该怎么做,而不是告诉你为什么该这么做,只知其然不知其所以然,这里将会讲的...因为X64DBG内存断点是真的拉跨,这里还里还是OD了 ...
  • 今天就聊一下 我在微信更新时 快速更新基址的一些干货 在OD里,寻找某一处功能代码,无非有几种方法,通过一系列操作,下断;寻找堆栈,这种方法非常繁琐耗时,一般来说新手用于熟悉OD使用,我们这里就不深入讲解...
  • 通过游戏外挂,学习逆向技术之快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别 一丶静态基址. 动态基址. 基址的区别 通过上一讲超级马里奥的游戏外挂技术制作.我们学习到了静态基址.以及观看内存区域...
  • 基址重定位

    2020-02-06 19:21:46
    基址重定位概念 当向程序的虚拟内存加载PE文件时,文件会被加载到ImageBase所指向的地址。 对EXE文件来说,EXE文件会首先加载到内存,每个文件总是使用独立的虚拟地址空间,这就意味着EXE文件不用考虑基址重定位问题...
  • CE寻找游戏静态基址教程

    万次阅读 2016-07-27 14:16:40
    一、CE是一个内存搜索工具,游戏运行时,大多数的...所以我们的目的是找到游戏中的基址。 二、首先,打开游戏,运行CE附加游戏进程。以金钱为例,金钱的初始值是50,那么在CE中搜索50,这时可能出现很多数据。然后切
  • OD查看内存信息

    千次阅读 2019-06-09 09:36:01
    必须以管理员身份运行 用OllyDbg查看内存信息 按运行 ALT+M打开内存窗口 选择一行,CTRL+B 打开搜索,
  • CE反汇编硬追基址

    千次阅读 2021-02-02 11:59:23
    前言: ...本人使用的工具:CE7.2汉化版(不用在意版本问题) PS:OD什么的不需要啦 本人使用的游戏:植物大战僵尸原版的汉化版(非年度版)        就是阳光基址是006A9EC
  • CTRL + F5 查找什么操作访问这个地址 EAX=00000064 EBX=00000001 ECX=00000000 EDX=08212160 ESI=10CE0588 EDI=0D87A078 EBP=0018FA98 ESP=00189790 EIP=0048982B 指针基址可能是 =10CE0588 0048981D - test al,al ...
  • 28.接下来要解决的获得人物基址问题,从上面例子的 ECX=3044AC00 用OD跟踪到最终来源是一个地址 027B38D9 8B0D 40A5D203 MOV ECX,DWORD PTR DS:[3D2A540] 29.重新启动游戏后发现[3D2A540] 这个地址是变化的 019038D9...
  • 寻找内存基址 1.我相信植物大战僵尸,很多人都玩过,接下来我来给大家展示怎样定位基址,先运行游戏软件,可以看到阳光值会发生变化,打开CE,在CE中打开游戏。 2.在CE中搜索阳光值100,可以看到很多结果,继续...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,291
精华内容 516
关键字:

od查找基址