用户
搜索
  • TA的每日心情
    郁闷
    7 天前
  • 签到天数: 302 天

    连续签到: 1 天

    [LV.8]以坛为家I

    i春秋作家

    ← 假 真➡i春秋打杂员

    Rank: 7Rank: 7Rank: 7

    57

    主题

    919

    帖子

    15

    魔法币
    收听
    3
    粉丝
    34
    注册时间
    2015-11-20

    核心白帽i春秋签约作者积极活跃奖

    z7788520 i春秋作家 ← 假 真➡i春秋打杂员 核心白帽 i春秋签约作者 积极活跃奖 楼主
    发表于 2017-12-27 02:49:30 74527

    我是一个菜鸟,文章中有哪里不对的地方还请各位大佬们指出,小菜感激不尽

    这四个程序是出自一个作者之手,作者思路应该没放在反编译上,应该把想法都放在了算法判断上,单篇分开写太少了,就把四篇合在一起,看一个系列比较有看头,但是挺长的,不知道你有没有耐心看完,全篇4825字,图片55张,看完大约需要20分钟

    0x01

    工具:OD
    PEID
    Andrénalin.1.exe
    Andrénalin.2.exe
    Andrénalin.3.exe
    Andrénalin.4.exe
    EXEInfoPE

    0X02

    先来看第一个

    界面如图是这样的
    只有一个输入key的地方
    随便输入字符看一下有什么提示

    这句话记下来,后面可以当做字符串

    0x02

    放到PEID里看看信息
    无壳程序、VB写的

    0x03

    如果是这种模式的,三种选择

    1、爆破

    2、追码

    3、算法分析计算

    载入OD,查找字符串

    一共就这几个,最熟悉的就是SUCCESFUL,成功
    其他的鸟语都看不懂,直接双击到successful,看看有什么跳转

    Je是灰色的,表示跳转未实现,就不会过成功,所以把je跳直接Nop掉,或者改成jmp跳

    Nop填充完保存一份

    运行,输入任意字符串

    0x04

    追码

    通过字符串跳到successful

    向上找,找到这串代码的段首,段首的开始就是另一段的断尾的结束

    特征都差不多
    在这个地方下一个断点,然后程序跑起来,F8单步往下跟踪

    输入“adminroot”点击OK,程序暂停在这,看断点此时已经变黄了
    开始单步往下跟踪

    00401D73   .  51            push    ecx

    来到这段代码,ecx出现我们输入的假码

    也可以看底下这块

    继续单步往下


    出现了新的

    Unicode " SynTaX 2oo1 "

    把这串代码填到程序里试一下结果

    跟之前爆破的结果一样
    继续就是算法分析??这个程序没有算法分析,最多只是做了一个判断跳转,比第一个写的更简单,然后就是继续作者第二个了

    0x05

    第二个如图所示

    用户名/密码模式

    首先考虑的还是那三种

    1、爆破

    2、追码

    3、算法计算

    算法分析的话,有的程序注册码他不是用算法来计算的,而是固定好一个值,与你输入的值做对比来判断这个注册码是否是正确的,而有的就是通过算法计算,获取你当前输入的值经过一系列计算得到结果,与你输入的做匹配来判断是否是正确的注册码,这两种情况

    很明显的字符串

    0x06

    继续用它做字符串载入OD

    一共就这些,看到rightig了吗?应该是正确的意思
    双击来到反汇编代码处

    往上有个JE跳转,看我画的大括号,跳转的线是灰色的表示未实现,所以不会跳过rightig

    再往下看

    通过上面跳下来的一个跳转,在jmp处实现了跳,所以会跳到LEIDER FALSCH,也就是失败
    所以要想不让他跳过,就把第一个je给NOP掉

    Nop完之后另存为一份,运行看看

    这个爆破就算完成了,再来试一下追码

    0x07

    依然是载入OD,找到正确的那个字符串,双击到汇编代码,找到段首的位置下断

    在这个地方下一个断点,F9运行程序
    输入“admin”、“root”

    程序断下来,F8单步往下跟踪

    SmartCheck 常见信息

    注释:
    __vbaVarForInit(VARIANT:Empty, PTR:0063F920, PTR:0063F91.....)
    解释: 
    移动到上面,为了下一个循环
    通常在它下面 __vbaVarForNext 用法与其一样.
    vbaVarAdd 加法(+) 
    vbaVarSub 减法(-) 
    vbaVarMul 乘法(*) 
    vbaVarDiv 除法(/) 
    vbaVarMod 取余(mod) 
    vbaVarNeg 相反数(-) 
    vbaVarIdiv 整除() 
    vbaVarPow 指数(^)
    比较函数 
    vbaVarTstEq 比较相等(=) 
    vbaVarTstNe 比较相等(<>) 
    vbaVarTstGt 比较大小(>) 
    vbaVarTstLt 比较大小(<) 
    vbaVarTstGe 比较大于或等于(>=) 
    vbaVarTstLe 比较小于或等于(<=) 
    vbaStrCmp 比较相等
    字符串操作 
    vbaLenBstr 传回字串有多少字数 
    vbaLenVar 传回字串有多少字数 
    vbaLenBstrB 传回字串有多少字符 
    vbaLenVarB 传回字串有多少字符 
    vbaStrCompVar 比较字符串 
    rtcLeftCharVar 截取字串左边某几个字符 
    rtcRightCharVar 截取字串右边某几个字符 
    rtcMidCharVar 截取字串中某个起始位置开始的某几个字符 
    __vbaVarForInit看到这一个之后循环要开始了,循环几次就是你输入的用户名有几个字节
    00402126   .  FF15 20414000 call    dword ptr [<&MSVBVM50.__vbaVarFo>; \__vbaVarForInit
    0040212C   .  8B3D 04414000 mov     edi, dword ptr [<&MSVBVM50.__vba>;  msvbvm50.__vbaFreeVarList
    00402132   >  85C0          test    eax, eax
    00402134   .  0F84 9C000000 je      004021D6
    0040213A   .  8D55 94       lea     edx, dword ptr [ebp-0x6C]
    0040213D   .  8D45 DC       lea     eax, dword ptr [ebp-0x24]
    00402140   .  52            push    edx
    00402141   .  50            push    eax
    00402142   .  C745 9C 01000>mov     dword ptr [ebp-0x64], 0x1
    00402149   .  895D 94       mov     dword ptr [ebp-0x6C], ebx
    0040214C   .  FF15 90414000 call    dword ptr [<&MSVBVM50.__vbaI4Var>;  msvbvm50.__vbaI4Var
    00402152   .  8D4D BC       lea     ecx, dword ptr [ebp-0x44]        ; |
    00402155   .  50            push    eax                              ; |Start  0x1
    00402156   .  8D55 84       lea     edx, dword ptr [ebp-0x7C]        ; |ecx=0012F49C
    
    00402159   .  51            push    ecx                              ; |dString8
    0040215A   .  52            push    edx                              ; |RetBUFFER edx=0012F464
    0040215B   .  FF15 38414000 call    dword ptr [<&MSVBVM50.#632>]     ; \rtcMidCharVar
    00402161   .  8D45 84       lea     eax, dword ptr [ebp-0x7C]
    00402164   .  8D4D A8       lea     ecx, dword ptr [ebp-0x58]
    00402167   .  50            push    eax                              ; /String8
    00402168   .  51            push    ecx                              ; |ARG2
    00402169   .  FF15 70414000 call    dword ptr [<&MSVBVM50.__vbaStrVa>; \__vbaStrVarVal
    0040216F   .  50            push    eax                              ; /String  “a”
    00402170   .  FF15 0C414000 call    dword ptr [<&MSVBVM50.#516>]     ; \rtcAnsiValueBstr
    00402176   .  66:8985 4CFFF>mov     word ptr [ebp-0xB4], ax
    0040217D   .  8D55 CC       lea     edx, dword ptr [ebp-0x34]
    00402180   .  8D85 44FFFFFF lea     eax, dword ptr [ebp-0xBC]
    00402186   .  52            push    edx                              ; /var18
    00402187   .  8D8D 74FFFFFF lea     ecx, dword ptr [ebp-0x8C]        ; |
    0040218D   .  50            push    eax                              ; |var28
    0040218E   .  51            push    ecx                              ; |saveto8
    0040218F   .  899D 44FFFFFF mov     dword ptr [ebp-0xBC], ebx        ; |
    00402195   .  FF15 94414000 call    dword ptr [<&MSVBVM50.__vbaVarAd>; \__vbaVarAdd
    0040219B   .  8BD0          mov     edx, eax
    0040219D   .  8D4D CC       lea     ecx, dword ptr [ebp-0x34]
    004021A0   .  FFD6          call    esi
    004021A2   .  8D4D A8       lea     ecx, dword ptr [ebp-0x58]
    004021A5   .  FF15 B8414000 call    dword ptr [<&MSVBVM50.__vbaFreeS>;  msvbvm50.__vbaFreeStr
    004021AB   .  8D55 84       lea     edx, dword ptr [ebp-0x7C]
    004021AE   .  8D45 94       lea     eax, dword ptr [ebp-0x6C]
    004021B1   .  52            push    edx
    004021B2   .  50            push    eax
    004021B3   .  53            push    ebx
    004021B4   .  FFD7          call    edi
    004021B6   .  83C4 0C       add     esp, 0xC
    004021B9   .  8D8D E8FEFFFF lea     ecx, dword ptr [ebp-0x118]
    004021BF   .  8D95 F8FEFFFF lea     edx, dword ptr [ebp-0x108]
    004021C5   .  8D45 DC       lea     eax, dword ptr [ebp-0x24]
    004021C8   .  51            push    ecx                              ; /TMPend8
    004021C9   .  52            push    edx                              ; |TMPstep8
    004021CA   .  50            push    eax                              ; |Counter8
    004021CB   .  FF15 AC414000 call    dword ptr [<&MSVBVM50.__vbaVarFo>; \__vbaVarForNext
    __vbavarfornext  这是VB程序里的循环结构, For... Next...  (Loop) 
    算法:取每个用户名的ASCII相加,然后乘以1234567890D(499602D2H),得到的数字转10进制字符串。第4个和第9个位置用"-"替代,即为真正的密码。

    五次循环结束之后,堆栈会出现几个字符串

    0012F3A4   00D1B74C
    0012F3A8   0012F4EC
    0012F3AC   0012F5C8
    0012F3B0   00D1B62C
    0012F3B4   00000000
    0012F3B8   73FF0260  usp10.73FF0260
    0012F3BC   00000000
    0012F3C0   0012F42C  UNICODE "n"
    0012F3C4   00000000
    0012F3C8   00D10003
    0012F3CC   00000000
    0012F3D0   00000005
    0012F3D4   0012F2F8
    0012F3D8   00D10003
    0012F3DC   00000000
    0012F3E0   00000001
    0012F3E4   0012F2F8
    0012F3E8   73FE5030  usp10.73FE5030
    0012F3EC   00000001
    0012F3F0   0012F408
    0012F3F4   00000000
    0012F3F8   0012F42C  UNICODE "n"
    0012F3FC   62C21269  返回到 lpk.62C21269 来自 lpk.62C24358
    0012F400   01010054
    0012F404   00000000
    0012F408   00000000
    0012F40C   0000C2E6
    0012F410  /0012F444
    0012F414  |62C21269  返回到 lpk.62C21269 来自 lpk.62C24358
    0012F418  |01010054
    0012F41C  |00000000
    0012F420  |00000000
    0012F424  |00000002
    0012F428  |00000030
    0012F42C  |0000006E
    0012F430  |00647598  UNICODE "&OK"
    0012F434  |00000008
    0012F438  |00000001
    0012F43C  |00401C34  UNICODE "-"
    0012F440  |FFFFFFFF
    0012F444  \00000000
    0012F448   77D4E384  返回到 user32.77D4E384 来自 lpk.LpkDrawTextEx
    0012F44C   01010054
    0012F450   00000000
    0012F454   00000000
    0012F458   00000030
    0012F45C   00000209
    0012F460   00647598  UNICODE "&OK"
    0012F464   00000000
    0012F468   741234E2  返回到 msvbvm50.741234E2 来自 msvbvm50.741233C4
    0012F46C   00174FDC  UNICODE "n"
    0012F470   0012F3C8
    0012F474   00000000
    0012F478   0012F4E8
    0012F47C   77AC4000
    0012F480   4262B849
    0012F484   00000000
    0012F488   00000000
    0012F48C   00000000
    0012F490   00000030
    0012F494   00000000
    0012F498   00647598  UNICODE "&OK"
    0012F49C   00000008
    0012F4A0   0012F4E8
    0012F4A4   00174FC4  UNICODE "admin"
    0012F4A8   00000000
    0012F4AC   00000008
    0012F4B0   000A0244
    0012F4B4   0016D11C  UNICODE "643-0987-690"


    UNICODE "643-0987-690"
    Name:"admin"

    注册成功

    0x08

    下个程序Andrénalin.3.exe

    用EXEInfoPE看下信息

    无壳,vb程序写的,这个作者写了四个,难度应该一个比一个难的
    思考三种方法:
    1、爆破
    ①、字符串
    ②、按钮事件
    2、追码
    3、算法分析

    0x09

    载入OD之后又这么几个字符串,第一眼看见

    文本字符串=kXy^rO|*yXo*m\kMuOn*+

    以为是注册码,复制下来粘贴进去看看,没想到是假的,骗子

    果然没那么简单,就知道没那么好心让我发现key
    不过没关系,搞死你的方法多的是
    第一种方法的第一小方法
    Rightig :正确
    双击进去,看看有没有什么跳转,万一误打误撞呢

    巧了,跟之前那个一毛一样,作者这是咋了?故意的?管他呢,现修改完在说,jeNop掉

    修改完程序另存为一份


    这.....

    0x10

    再来看下按钮事件
    知识点:VB按钮事件特征码816C24
    右键查找二进制命令输入813C24


    CTRL+L查找下一个断点,发现只有一个,那就在这一个jmp处下断点
    知识点:
    如果查找有多个jmp,全部设置 int3断点, 然后调试 找自己需要的事件
    F9运行程序

    输入注册码,发现程序断下来了,仔细看jmp跳转已经实现了,所以单步往下走必然会跳转

    这就是点击确定按钮事件的段首
    推荐一个破解vb的程序

    SMARTCHECK,WKTVBDebugger,VB Decompiler

    不止OD,多的是,但是个人习惯喜欢用OD和IDA pro ,动静结合
    来到段首之后,在继续往下扒拉一下就会找到这个事件的跳转

    往下会有好几个跳转,je、jo,但是我们要找的是离rightig最近的那个跳转

    熟悉的界面,通过两种方法找到关键跳转,je处Nop就完事

    0x11

    这个程序要是追码的话跟第一个不一样,第一个没有算法,只是简单判断对比,这一个追码相当于算法分析了
    这是一个循环跳转,经过了好几次跳转,有耐心的可以尝试一下几次跳转
    00401F68   > /85C0          test    eax, eax
    00401F6A   . |0F84 BB000000 je      0040202B
    00401F70   . |8D55 94       lea     edx, dword ptr [ebp-0x6C]
    00401F73   . |8D45 DC       lea     eax, dword ptr [ebp-0x24]
    00401F76   . |52            push    edx
    00401F77   . |50            push    eax
    00401F78   . |C745 9C 01000>mov     dword ptr [ebp-0x64], 0x1
    00401F7F   . |C745 94 02000>mov     dword ptr [ebp-0x6C], 0x2
    00401F86   . |FF15 90414000 call    dword ptr [<&MSVBVM50.__vbaI4Var>;  msvbvm50.__vbaI4Var
    00401F8C   . |8D4D BC       lea     ecx, dword ptr [ebp-0x44]        ; |
    00401F8F   . |50            push    eax                              ; |Start
    00401F90   . |8D55 84       lea     edx, dword ptr [ebp-0x7C]        ; |
    00401F93   . |51            push    ecx                              ; |dString8
    00401F94   . |52            push    edx                              ; |RetBUFFER
    00401F95   . |FF15 34414000 call    dword ptr [<&MSVBVM50.#632>]     ; \rtcMidCharVar
    00401F9B   . |8D45 84       lea     eax, dword ptr [ebp-0x7C]
    00401F9E   . |8D4D A8       lea     ecx, dword ptr [ebp-0x58]
    00401FA1   . |50            push    eax                              ; /String8
    00401FA2   . |51            push    ecx                              ; |ARG2
    00401FA3   . |FF15 64414000 call    dword ptr [<&MSVBVM50.__vbaStrVa>; \__vbaStrVarVal
    00401FA9   . |50            push    eax                              ; /String
    00401FAA   . |FF15 08414000 call    dword ptr [<&MSVBVM50.#516>]     ; \rtcAnsiValueBstr
    00401FB0   . |66:05 0A00    add     ax, 0xA
    00401FB4   . |0F80 B0020000 jo      0040226A
    00401FBA   . |0FBFD0        movsx   edx, ax
    00401FBD   . |52            push    edx
    00401FBE   . |FF15 70414000 call    dword ptr [<&MSVBVM50.#537>]     ;  msvbvm50.rtcBstrFromAnsi
    00401FC4   . |8985 7CFFFFFF mov     dword ptr [ebp-0x84], eax
    00401FCA   . |8D45 CC       lea     eax, dword ptr [ebp-0x34]
    00401FCD   . |8D8D 74FFFFFF lea     ecx, dword ptr [ebp-0x8C]
    00401FD3   . |50            push    eax
    00401FD4   . |8D95 64FFFFFF lea     edx, dword ptr [ebp-0x9C]
    00401FDA   . |51            push    ecx
    00401FDB   . |52            push    edx
    00401FDC   . |C785 74FFFFFF>mov     dword ptr [ebp-0x8C], 0x8
    00401FE6   . |FFD3          call    ebx
    00401FE8   . |8BD0          mov     edx, eax
    00401FEA   . |8D4D CC       lea     ecx, dword ptr [ebp-0x34]
    00401FED   . |FFD6          call    esi
    00401FEF   . |8D4D A8       lea     ecx, dword ptr [ebp-0x58]
    00401FF2   . |FF15 B0414000 call    dword ptr [<&MSVBVM50.__vbaFreeS>;  msvbvm50.__vbaFreeStr
    00401FF8   . |8D85 74FFFFFF lea     eax, dword ptr [ebp-0x8C]
    00401FFE   . |8D4D 84       lea     ecx, dword ptr [ebp-0x7C]
    00402001   . |50            push    eax
    00402002   . |8D55 94       lea     edx, dword ptr [ebp-0x6C]
    00402005   . |51            push    ecx
    00402006   . |52            push    edx
    00402007   . |6A 03         push    0x3
    00402009   . |FFD7          call    edi
    0040200B   . |83C4 10       add     esp, 0x10
    0040200E   . |8D85 ECFEFFFF lea     eax, dword ptr [ebp-0x114]
    00402014   . |8D8D FCFEFFFF lea     ecx, dword ptr [ebp-0x104]
    0040201A   . |8D55 DC       lea     edx, dword ptr [ebp-0x24]
    0040201D   . |50            push    eax                              ; /TMPend8
    0040201E   . |51            push    ecx                              ; |TMPstep8
    0040201F   . |52            push    edx                              ; |Counter8
    00402020   . |FF15 A4414000 call    dword ptr [<&MSVBVM50.__vbaVarFo>; \__vbaVarForNext
    00402026   .^\E9 3DFFFFFF   jmp     00401F68
    
    0040202B   > \8D45 CC       lea     eax, dword ptr [ebp-0x34]
    0040202E   .  8D8D 54FFFFFF lea     ecx, dword ptr [ebp-0xAC]
    00402034   .  50            push    eax                              ; /var18
    00402035   .  51            push    ecx                              ; |var28
    00402036   .  C785 5CFFFFFF>mov     dword ptr [ebp-0xA4], 00401A8C   ; |kXy^rO|*yXo*m\kMuOn*+
    00402040   .  C785 54FFFFFF>mov     dword ptr [ebp-0xAC], 0x8008     ; |
    0040204A   .  FF15 40414000 call    dword ptr [<&MSVBVM50.__vbaVarTs>; \__vbaVarTstEq
    00402050   .  66:85C0       test    ax, ax

    我们输入的”admin”经过了几次循环后出现这样的情况
    0012F46C   0017468C  UNICODE "m"
    0012F470   0012F3CC
    0012F474   00000002
    0012F478   0012F4E8
    0012F47C   00000001
    0012F480   00000000
    0012F484   00000000
    0012F488   00000000
    0012F48C   00000000
    0012F490   00000030
    0012F494   00000000
    0012F498   0067A4C0  UNICODE "&OK"
    0012F49C   00000008
    0012F4A0   0012F4E8
    0012F4A4   00170E6C  UNICODE "admin"
    0012F4A8   00000000
    0012F4AC   00000008
    0012F4B0   77D4E384  返回到 user32.77D4E384 来自 lpk.LpkDrawTextEx
    0012F4B4   00174FA4  UNICODE "knw"
    每个字符加0xA操作,逆着Key逐个减0xA,得到真正的Key
    注册码的算法是从"kXy^rO|yXom\kMuOn*+"开始取每个字符的ASCII值减去0xA,结果再转换成字符

    aNoThEr oNe cRaCkEd !

    0x12

    最后这一个难度有点大,跟之前的完全不一样,没有确定按钮,只有点击输入的按钮

    目测这个程序应该是输入正确的注册码,未注册变成已注册
    但是,输入错误什么提示也没有
    这样的话先放到OD里看看有没有字符串



    这是要闹那样啊
    为什么这么多registriert 还带着这么多字符串
    无从下手...那就闭着眼随便摸一个双击看看

    这里正好有一个je未实现跳转,还有个registriert,说明没注册,我们要把这个je改为jmp或者Nop掉

    可能会有多处验证,这没法说,毕竟不是按钮事件,没法下按钮事件的断点
    修改完程序另存为一份


    这这这.....
    这就完事了??作者是不是做梦写的

    0x13

    最烦不过是算法分析,烦的一批啊,破解简单,算法分析要命
    载入OD之后,随便找一个registriert 字符串双击过去,往上找,找到段首
    F9运行程序在输入注册码”123456789”一定要先输入在在段首下断,要不程序马上会终止
    输入之后,F2在段首下断,F9运行程序,程序会暂停住,此时我们F8单步往下走,开始慢慢的分析
    单步到004047C0处,出现Unicode,也就是我们的注册码

    在去看堆栈

    地址0012FADC 出现另一组Unicode

    00406451   .  B8 02000000   mov     eax, 0x2
    00406456   .  B9 01000000   mov     ecx, 0x1
    0040645B   .  8985 4CFFFFFF mov     dword ptr [ebp-0xB4], eax
    00406461   .  8985 3CFFFFFF mov     dword ptr [ebp-0xC4], eax
    00406467   .  898D 54FFFFFF mov     dword ptr [ebp-0xAC], ecx
    0040646D   .  898D 44FFFFFF mov     dword ptr [ebp-0xBC], ecx
    00406473   .  8D85 4CFFFFFF lea     eax, dword ptr [ebp-0xB4]
    00406479   .  8D4D BC       lea     ecx, dword ptr [ebp-0x44]
    0040647C   .  50            push    eax                              ; /Step8
    0040647D   .  8D55 9C       lea     edx, dword ptr [ebp-0x64]        ; |
    00406480   .  51            push    ecx                              ; |/var18
    00406481   .  52            push    edx                              ; ||retBuffer8
    00406482   .  FF15 30104000 call    dword ptr [<&MSVBVM60.__vbaLenVa>; |\__vbaLenVar
    00406488   .  50            push    eax                              ; |End8
    00406489   .  8D85 3CFFFFFF lea     eax, dword ptr [ebp-0xC4]        ; |
    0040648F   .  8D8D 68FDFFFF lea     ecx, dword ptr [ebp-0x298]       ; |
    00406495   .  50            push    eax                              ; |Start8
    00406496   .  8D95 78FDFFFF lea     edx, dword ptr [ebp-0x288]       ; |
    0040649C   .  51            push    ecx                              ; |TMPend8
    0040649D   .  8D45 DC       lea     eax, dword ptr [ebp-0x24]        ; |
    004064A0   .  52            push    edx                              ; |TMPstep8
    004064A1   .  50            push    eax                              ; |Counter8
    004064A2   .  FF15 38104000 call    dword ptr [<&MSVBVM60.__vbaVarFo>; \__vbaVarForInit
    004064A8   >  85C0          test    eax, eax
    004064AA   .  0F84 29010000 je      004065D9
    004064B0   .  8D4D BC       lea     ecx, dword ptr [ebp-0x44]
    004064B3   .  6A 02         push    0x2
    004064B5   .  8D55 8C       lea     edx, dword ptr [ebp-0x74]
    004064B8   .  51            push    ecx
    004064B9   .  52            push    edx
    004064BA   .  FFD3          call    ebx
    004064BC   .  8D45 8C       lea     eax, dword ptr [ebp-0x74]
    004064BF   .  8D4D B0       lea     ecx, dword ptr [ebp-0x50]
    004064C2   .  50            push    eax
    004064C3   .  51            push    ecx
    004064C4   .  FFD6          call    esi
    004064C6   .  50            push    eax
    004064C7   .  FF15 D8104000 call    dword ptr [<&MSVBVM60.#581>]     ;  msvbvm60.rtcR8ValFromBstr
    004064CD   .  DD9D 34FFFFFF fstp    qword ptr [ebp-0xCC]
    004064D3   .  8D55 9C       lea     edx, dword ptr [ebp-0x64]
    004064D6   .  8D45 DC       lea     eax, dword ptr [ebp-0x24]
    004064D9   .  52            push    edx
    004064DA   .  50            push    eax
    004064DB   .  C745 A4 01000>mov     dword ptr [ebp-0x5C], 0x1
    004064E2   .  C745 9C 02000>mov     dword ptr [ebp-0x64], 0x2
    004064E9   .  FF15 AC104000 call    dword ptr [<&MSVBVM60.__vbaI4Var>;  msvbvm60.__vbaI4Var
    004064EF   .  8D4D BC       lea     ecx, dword ptr [ebp-0x44]
    004064F2   .  50            push    eax
    004064F3   .  8D55 B8       lea     edx, dword ptr [ebp-0x48]
    004064F6   .  51            push    ecx
    004064F7   .  52            push    edx
    004064F8   .  FFD6          call    esi
    004064FA   .  50            push    eax
    004064FB   .  FF15 4C104000 call    dword ptr [<&MSVBVM60.#631>]     ;  msvbvm60.rtcMidCharBstr
    00406501   .  8BD0          mov     edx, eax
    00406503   .  8D4D B4       lea     ecx, dword ptr [ebp-0x4C]
    00406506   .  FF15 BC104000 call    dword ptr [<&MSVBVM60.__vbaStrMo>;  msvbvm60.__vbaStrMove
    0040650C   .  50            push    eax                              ; /String
    0040650D   .  FF15 20104000 call    dword ptr [<&MSVBVM60.#516>]     ; \rtcAnsiValueBstr
    00406513   .  0FBFC0        movsx   eax, ax
    00406516   .  8985 60FCFFFF mov     dword ptr [ebp-0x3A0], eax
    0040651C   .  8D8D 7CFFFFFF lea     ecx, dword ptr [ebp-0x84]
    00406522   .  DB85 60FCFFFF fild    dword ptr [ebp-0x3A0]
    00406528   .  51            push    ecx
    00406529   .  C785 7CFFFFFF>mov     dword ptr [ebp-0x84], 0x5
    00406533   .  DD9D 58FCFFFF fstp    qword ptr [ebp-0x3A8]
    00406539   .  DD85 58FCFFFF fld     qword ptr [ebp-0x3A8]
    0040653F   .  DC85 34FFFFFF fadd    qword ptr [ebp-0xCC]
    00406545   .  DD5D 84       fstp    qword ptr [ebp-0x7C]
    00406548   .  DFE0          fstsw   ax
    0040654A   .  A8 0D         test    al, 0xD
    0040654C   .  0F85 7A040000 jnz     004069CC
    00406552   .  FF15 94104000 call    dword ptr [<&MSVBVM60.#572>]     ;  msvbvm60.rtcHexBstrFromVar
    00406558   .  8985 74FFFFFF mov     dword ptr [ebp-0x8C], eax
    0040655E   .  8D55 CC       lea     edx, dword ptr [ebp-0x34]
    00406561   .  8D85 6CFFFFFF lea     eax, dword ptr [ebp-0x94]
    00406567   .  52            push    edx
    00406568   .  8D8D 5CFFFFFF lea     ecx, dword ptr [ebp-0xA4]
    0040656E   .  50            push    eax
    0040656F   .  51            push    ecx
    00406570   .  C785 6CFFFFFF>mov     dword ptr [ebp-0x94], 0x8
    0040657A   .  FF15 84104000 call    dword ptr [<&MSVBVM60.__vbaVarCa>;  msvbvm60.__vbaVarCat
    00406580   .  8BD0          mov     edx, eax
    00406582   .  8D4D CC       lea     ecx, dword ptr [ebp-0x34]
    00406585   .  FFD7          call    edi
    00406587   .  8D55 B0       lea     edx, dword ptr [ebp-0x50]
    0040658A   .  8D45 B4       lea     eax, dword ptr [ebp-0x4C]
    0040658D   .  52            push    edx
    0040658E   .  8D4D B8       lea     ecx, dword ptr [ebp-0x48]
    00406591   .  50            push    eax
    00406592   .  51            push    ecx
    00406593   .  6A 03         push    0x3
    00406595   .  FF15 9C104000 call    dword ptr [<&MSVBVM60.__vbaFreeS>;  msvbvm60.__vbaFreeStrList
    0040659B   .  8D95 6CFFFFFF lea     edx, dword ptr [ebp-0x94]
    004065A1   .  8D85 7CFFFFFF lea     eax, dword ptr [ebp-0x84]
    004065A7   .  52            push    edx
    004065A8   .  8D4D 8C       lea     ecx, dword ptr [ebp-0x74]
    004065AB   .  50            push    eax
    004065AC   .  8D55 9C       lea     edx, dword ptr [ebp-0x64]
    004065AF   .  51            push    ecx
    004065B0   .  52            push    edx
    004065B1   .  6A 04         push    0x4
    004065B3   .  FF15 14104000 call    dword ptr [<&MSVBVM60.__vbaFreeV>;  msvbvm60.__vbaFreeVarList
    004065B9   .  83C4 24       add     esp, 0x24
    004065BC   .  8D85 68FDFFFF lea     eax, dword ptr [ebp-0x298]
    004065C2   .  50            push    eax                              ; /TMPend8
    004065C3   .  8D8D 78FDFFFF lea     ecx, dword ptr [ebp-0x288]       ; |
    004065C9   .  8D55 DC       lea     edx, dword ptr [ebp-0x24]        ; |
    004065CC   .  51            push    ecx                              ; |TMPstep8
    004065CD   .  52            push    edx                              ; |Counter8
    004065CE   .  FF15 C8104000 call    dword ptr [<&MSVBVM60.__vbaVarFo>; \__vbaVarForNext
    004065D4   .^ E9 CFFEFFFF   jmp     004064A8
    004065D9   >  8D45 CC       lea     eax, dword ptr [ebp-0x34]
    004065DC   .  8D8D 4CFFFFFF lea     ecx, dword ptr [ebp-0xB4]
    004065E2   .  50            push    eax                              ; /var18
    004065E3   .  51            push    ecx                              ; |var28
    004065E4   .  C785 54FFFFFF>mov     dword ptr [ebp-0xAC], 00402390   ; |0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D817E7B7C
    004065EE   .  C785 4CFFFFFF>mov     dword ptr [ebp-0xB4], 0x8008     ; |
    004065F8   .  FF15 5C104000 call    dword ptr [<&MSVBVM60.__vbaVarTs>; \__vbaVarTstEq
    004065FE   .  66:85C0       test    ax, ax
    00406601   .  74 4C         je      short 0040664F
    取字符串前两位字符转换成浮点数值,然后取假码的每一个字符,转换成10进制数值浮点数,加上前两位字符转换成的数值,再转换成16进制数值,把数值作为字符连接到一起,最前面加上“0”。
    “123456789”取前两位12,加上“1”的ascll值,得数的16进制32

    前面加0,得到

    "032333435363738393A"

    然后在和

    "0817E747D7A7D7C7F82836D74G47A7F7E7B7C7D826D817E7B7"

    做对比
    继续观察Key,前边的0是系统添加的,我们只需要分析后边的就好。

    81 7E 74 7D 7A 7D 7C 7F 82 83 6D 74 74 7A 7F 7E 7B 7C 7D 82 6D 81 7E 7B 7C

    对照ascll ,#最小,9最大。Key里最大的是83,最小的是6D,那么83是9,6D是#,然后依次把其他的Key得出来。最后剩下74,比#(6D)的ASC大,比0(7A)的ASC小,只能是*了,

    对应关系如下:0—7A;1—7B;2—7C;3—7D;4—7E;5—7F;6—80;7—81;8—82;9—83;*—74;#—6D

    最后字符连起来是74*3032589#**0541238#7412



    到此四个就完成了,附件在下方获取(附带一本VB程序逆向常用的函数)
    游客,如果您要查看本帖隐藏内容请回复

    评分

    参与人数 1魔法币 +50 收起 理由
    XiaoYue97 + 50 支持大表哥

    查看全部评分

    本帖被以下淘专辑推荐:

    不惹事,不生事,妖魔鬼怪快走开
    发表于 2017-12-27 10:54:24
    作者这个教程可以的,
    使用道具 举报 回复
    发表于 2017-12-27 11:44:38
    深入浅出、简明易懂。
    使用道具 举报 回复
    发表于 2017-12-27 15:52:50
    学习了新知识,很棒
    使用道具 举报 回复
    发表于 2017-12-28 23:24:26
    学习学习
    使用道具 举报 回复
    学习知识
    使用道具 举报 回复
    发表于 2018-5-4 21:45:52
    xiexielouzhufenxiang
    使用道具 举报 回复
    膜拜算法大佬
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册