BLHeliSuite32逆向(五)

Crack,Reverse

Views:  times Updated on June 23, 2024 Posted by elmagnifico on June 17, 2024

Foreword

BLH在停止维护以后给厂商给出了离线版本,离线版本不兼容之前的上位机了,再次破解看一下具体是哪里出现了异同

参考流程

由于有之前的流程,所以这里直接参考

actReadSetupExecute 按键act
 DoBtnReadSetup 按键具体操作
  ReadSetupAll 读取配置信息
   ReadDeviceSetupSection 这里是操作去读
    Send_cmd_DeviceReadBLHeliSetupSection 发送读取命令,执行后就拿到了256字节
    ReadSetupFromBinString 这里就是关键,解析读上来的字符串,然后赋值给了BLHeli的各个参数
     TBLHeli.Init 参数存储的对象初始化
     BLHeliSu.006EA090 解密开始的函数
      BLHeliSu.006E1B48 解密循环函数
       BLHeliSu.006E1960 内存可读的开始
        BLHeliSu.006D5A78 偏移操作的函数
    ReadSetupFromBinString 的后续内容会读取所有配置,然后给BLHeli对象赋值

这次破解发现IDR和Ollydbg的地址又不一样了,所以直接使用IDR生成Map,然后用Ollydbg加载map文件

image-20240617180329673

image-20240617180357725

加载完发现,好像还是有点不够好用,有些东西还是找不到

似乎map文件加载以后也不能匹配,甚至直接错位了,暂时无解,怀疑BLH中有了什么保护机制?需要进一步学习一下

二次破解

借鉴之前的经验,发现函数名有变更,看了一下UI的调用逻辑,目前判断应该是在这个函数内

image-20240617113021823

调用栈

actReadSetupExecute 按键act
 DoBtnReadSetup
  _DoBtnReadSetup
   ReadSetupCurrentESC
    DoConnectInterface
    TBLHeli.Init
    ReadDeviceSetupSection
     ReadSetupByteBlocks
     ReadSetupBytes

同一个函数中有两个读取的地方,这里要单独分析两个read

ReadSetupBytes

先看ReadSetupBytes

BLHeli.TBLHeli.ReadSetupBytes
006F56B4        push        ebp
006F56B5        mov         ebp,esp
006F56B7        add         esp,0FFFFFFF8
006F56BA        push        ebx
006F56BB        push        esi
006F56BC        push        edi
006F56BD        mov         ebx,ecx
006F56BF        mov         esi,edx
006F56C1        mov         edi,eax
006F56C3        lea         eax,[ebp-8]
006F56C6        mov         edx,dword ptr ds:[6DB86C];TByteBlocks
006F56CC        call        0040C438
006F56D1        xor         eax,eax
006F56D3        push        ebp
006F56D4        push        6F5720
006F56D9        push        dword ptr fs:[eax]
006F56DC        mov         dword ptr fs:[eax],esp
006F56DF        xor         eax,eax
006F56E1        mov         dword ptr [ebp-8],eax
006F56E4        lea         eax,[ebp-4]
006F56E7        mov         edx,esi
006F56E9        mov         ecx,dword ptr ds:[404CB0];TArray<System.Byte>
006F56EF        call        @DynArrayAsg
006F56F4        lea         edx,[ebp-8]
006F56F7        mov         ecx,ebx
006F56F9        mov         eax,edi
006F56FB        call        TBLHeli.ReadSetupByteBlocks
006F5700        mov         ebx,eax
006F5702        xor         eax,eax
006F5704        pop         edx
006F5705        pop         ecx
006F5706        pop         ecx
006F5707        mov         dword ptr fs:[eax],edx
006F570A        push        6F5727
006F570F        lea         eax,[ebp-8]
006F5712        mov         edx,dword ptr ds:[6DB86C];TByteBlocks
006F5718        call        0040C824
006F571D        pop         eax
006F571E        jmp         eax
006F5720>       jmp         @HandleFinally
006F5725>       jmp         006F570F
006F5727        mov         eax,ebx
006F5729        pop         edi
006F572A        pop         esi
006F572B        pop         ebx
006F572C        pop         ecx
006F572D        pop         ecx
006F572E        pop         ebp
006F572F        ret

发现ReadSetupBytes也调用了ReadSetupByteBlocks

0040C438

0040C438,感觉非常像加密的程序,先放着,后面再来看

System.sub_0040C438
0040C438        push        ebp
0040C439        mov         ebp,esp
0040C43B        add         esp,0FFFFFFEC
0040C43E        push        ebx
0040C43F        push        esi
0040C440        push        edi
0040C441        mov         dword ptr [ebp-8],edx
0040C444        mov         dword ptr [ebp-4],eax
0040C447        mov         eax,dword ptr [ebp-8]
0040C44A        movzx       ebx,byte ptr [eax+1]
0040C44E        add         ebx,eax
0040C450        mov         edx,dword ptr [ebx+6]
0040C453        lea         edx,[ebx+edx*8+0A]
0040C457        cmp         byte ptr [eax],16
0040C45A>       jne         0040C474
0040C45C        cmp         byte ptr [edx],1
0040C45F>       jbe         0040C474
0040C461        cmp         dword ptr [edx+5],0
0040C465>       je          0040C474
0040C467        mov         ebx,edx
0040C469        mov         eax,dword ptr [ebp-4]
0040C46C        call        dword ptr [ebx+5]
0040C46F>       jmp         0040C5CB
0040C474        cmp         dword ptr [ebx+6],0
0040C478>       jbe         0040C5CB
0040C47E        xor         eax,eax
0040C480        mov         dword ptr [ebp-0C],eax
0040C483        xor         eax,eax
0040C485        mov         dword ptr [ebp-10],eax
0040C488        cmp         byte ptr [edx],0
0040C48B>       jbe         0040C4AE
0040C48D        test        byte ptr [edx+1],2
0040C491>       je          0040C4AE
0040C493        mov         esi,dword ptr [ebx+6]
0040C496        dec         esi
0040C497        cmp         esi,0
0040C49A>       jb          0040C4AE
0040C49C        cmp         dword ptr [ebx+esi*8+0A],0
0040C4A1>       jne         0040C4A8
0040C4A3        mov         dword ptr [ebp-10],esi
0040C4A6>       jmp         0040C4AE
0040C4A8        dec         esi
0040C4A9        cmp         esi,0FFFFFFFF
0040C4AC>       jne         0040C49C
0040C4AE        xor         edx,edx
0040C4B0        push        ebp
0040C4B1        push        40C579
0040C4B6        push        dword ptr fs:[edx]
0040C4B9        mov         dword ptr fs:[edx],esp
0040C4BC        mov         edi,dword ptr [ebx+6]
0040C4BF        dec         edi
0040C4C0        test        edi,edi
0040C4C2>       jb          0040C56F
0040C4C8        inc         edi
0040C4C9        xor         esi,esi
0040C4CB        mov         eax,dword ptr [ebx+esi*8+0A]
0040C4CF        test        eax,eax
0040C4D1>       je          0040C567
0040C4D7        mov         dword ptr [ebp-0C],esi
0040C4DA        mov         eax,dword ptr [eax]
0040C4DC        mov         edx,dword ptr [ebx+esi*8+0E]
0040C4E0        add         edx,dword ptr [ebp-4]
0040C4E3        mov         dword ptr [ebp-14],edx
0040C4E6        movzx       edx,byte ptr [eax]
0040C4E9        add         edx,0FFFFFFF6
0040C4EC        cmp         edx,0C
0040C4EF>       ja          0040C560
0040C4F1        movzx       edx,byte ptr [edx+40C4FF]
0040C4F8        jmp         dword ptr [edx*4+40C50C]
0040C4FF        db          1
0040C500        db          1
0040C501        db          2
0040C502        db          3
0040C503        db          4
0040C504        db          1
0040C505        db          0
0040C506        db          1
0040C507        db          1
0040C508        db          0
0040C509        db          0
0040C50A        db          0
0040C50B        db          4
0040C50C        dd          0040C560
0040C510        dd          0040C520
0040C514        dd          0040C529
0040C518        dd          0040C53A
0040C51C        dd          0040C554
0040C520        mov         eax,dword ptr [ebp-14]
0040C523        xor         edx,edx
0040C525        mov         dword ptr [eax],edx
0040C527>       jmp         0040C567
0040C529        mov         edx,dword ptr [ebp-14]
0040C52C        mov         ecx,edi
0040C52E        mov         edi,edx
0040C530        xor         eax,eax
0040C532        stos        dword ptr [edi]
0040C533        stos        dword ptr [edi]
0040C534        stos        dword ptr [edi]
0040C535        stos        dword ptr [edi]
0040C536        mov         edi,ecx
0040C538>       jmp         0040C567
0040C53A        movzx       edx,byte ptr [eax+1]
0040C53E        add         edx,eax
0040C540        mov         eax,edx
0040C542        mov         ecx,dword ptr [eax+6]
0040C545        mov         eax,dword ptr [eax+0A]
0040C548        mov         edx,dword ptr [eax]
0040C54A        mov         eax,dword ptr [ebp-14]
0040C54D        call        @AddRefArray
0040C552>       jmp         0040C567
0040C554        mov         edx,eax
0040C556        mov         eax,dword ptr [ebp-14]
0040C559        call        0040C438
0040C55E>       jmp         0040C567
0040C560        mov         al,2
0040C562        call        Error
0040C567        inc         esi
0040C568        dec         edi
0040C569>       jne         0040C4CB
0040C56F        xor         eax,eax
0040C571        pop         edx
0040C572        pop         ecx
0040C573        pop         ecx
0040C574        mov         dword ptr fs:[eax],edx
0040C577>       jmp         0040C5CB
0040C579>       jmp         @HandleAnyException
0040C57E        mov         eax,dword ptr [ebp-0C]
0040C581        cmp         eax,dword ptr [ebp-10]
0040C584>       jbe         0040C58C
0040C586        mov         eax,dword ptr [ebp-10]
0040C589        mov         dword ptr [ebp-0C],eax
0040C58C        mov         eax,dword ptr [ebp-8]
0040C58F        movzx       ebx,byte ptr [eax+1]
0040C593        add         ebx,eax
0040C595        cmp         dword ptr [ebp-0C],0
0040C599>       jbe         0040C5C1
0040C59B        dec         dword ptr [ebp-0C]
0040C59E        mov         eax,dword ptr [ebp-0C]
0040C5A1        mov         eax,dword ptr [ebx+eax*8+0A]
0040C5A5        mov         edx,dword ptr [eax]
0040C5A7        mov         eax,dword ptr [ebp-0C]
0040C5AA        mov         eax,dword ptr [ebx+eax*8+0E]
0040C5AE        add         eax,dword ptr [ebp-4]
0040C5B1        mov         ecx,1
0040C5B6        call        @FinalizeArray
0040C5BB        cmp         dword ptr [ebp-0C],0
0040C5BF>       ja          0040C59B
0040C5C1        call        @RaiseAgain
0040C5C6        call        @DoneExcept
0040C5CB        pop         edi
0040C5CC        pop         esi
0040C5CD        pop         ebx
0040C5CE        mov         esp,ebp
0040C5D0        pop         ebp
0040C5D1        ret

0040C824

System.sub_0040C824
0040C824        push        ebp
0040C825        mov         ebp,esp
0040C827        add         esp,0FFFFFFE4
0040C82A        push        ebx
0040C82B        push        esi
0040C82C        push        edi
0040C82D        mov         dword ptr [ebp-4],eax
0040C830        mov         eax,edx
0040C832        movzx       ecx,byte ptr [eax+1]
0040C836        add         ecx,eax
0040C838        mov         dword ptr [ebp-8],ecx
0040C83B        mov         ecx,dword ptr [ebp-8]
0040C83E        add         ecx,0A
0040C841        mov         ebx,dword ptr [ebp-8]
0040C844        mov         ebx,dword ptr [ebx+6]
0040C847        shl         ebx,3
0040C84A        add         ecx,ebx
0040C84C        cmp         byte ptr [eax],16
0040C84F>       jne         0040C86C
0040C851        cmp         byte ptr [ecx],2
0040C854>       jbe         0040C86C
0040C856        cmp         dword ptr [ecx+9],0
0040C85A>       je          0040C86C
0040C85C        mov         ebx,ecx
0040C85E        mov         eax,dword ptr [ebp-4]
0040C861        call        dword ptr [ebx+9]
0040C864        mov         ebx,dword ptr [ebp-4]
0040C867>       jmp         0040CB4A
0040C86C        mov         eax,dword ptr [ebp-8]
0040C86F        mov         eax,dword ptr [eax+6]
0040C872        test        eax,eax
0040C874>       jbe         0040CB47
0040C87A        mov         byte ptr [ebp-19],0
0040C87E        cmp         byte ptr [ecx],0
0040C881>       jbe         0040C88B
0040C883        test        byte ptr [ecx+1],2
0040C887        setne       byte ptr [ebp-19]
0040C88B        mov         dword ptr [ebp-10],eax
0040C88E        xor         edx,edx
0040C890        push        ebp
0040C891        push        40C9C8
0040C896        push        dword ptr fs:[edx]
0040C899        mov         dword ptr fs:[edx],esp
0040C89C        mov         eax,dword ptr [ebp-8]
0040C89F        mov         edx,dword ptr [ebp-10]
0040C8A2        lea         edi,[eax+edx*8+0A]
0040C8A6        cmp         byte ptr [ebp-19],0
0040C8AA>       je          0040C8DF
0040C8AC        sub         edi,8
0040C8AF        dec         dword ptr [ebp-10]
0040C8B2        mov         eax,dword ptr [edi]
0040C8B4        test        eax,eax
0040C8B6>       je          0040C8DB
0040C8B8        mov         esi,dword ptr [edi+4]
0040C8BB        add         esi,dword ptr [ebp-4]
0040C8BE        mov         ebx,eax
0040C8C0        mov         eax,dword ptr [ebx]
0040C8C2        movzx       eax,byte ptr [eax]
0040C8C5        sub         al,0F
0040C8C7>       jne         0040C8D2
0040C8C9        mov         eax,esi
0040C8CB        call        00411350
0040C8D0>       jmp         0040C8AC
0040C8D2        mov         al,2
0040C8D4        call        Error
0040C8D9>       jmp         0040C8AC
0040C8DB        mov         byte ptr [ebp-19],0
0040C8DF        cmp         dword ptr [ebp-10],0
0040C8E3>       jbe         0040C9BB
0040C8E9        sub         edi,8
0040C8EC        dec         dword ptr [ebp-10]
0040C8EF        mov         ebx,dword ptr [edi]
0040C8F1        mov         esi,dword ptr [edi+4]
0040C8F4        add         esi,dword ptr [ebp-4]
0040C8F7        mov         eax,dword ptr [ebx]
0040C8F9        movzx       eax,byte ptr [eax]
0040C8FC        add         eax,0FFFFFFF6
0040C8FF        cmp         eax,0C
0040C902>       ja          0040C9AA
0040C908        jmp         dword ptr [eax*4+40C90F]
0040C90F        dd          0040C943
0040C913        dd          0040C94C
0040C917        dd          0040C95E
0040C91B        dd          0040C967
0040C91F        dd          0040C98B
0040C923        dd          0040C996
0040C927        dd          0040C9AA
0040C92B        dd          0040C99F
0040C92F        dd          0040C955
0040C933        dd          0040C9AA
0040C937        dd          0040C9AA
0040C93B        dd          0040C9AA
0040C93F        dd          0040C98B
0040C943        mov         eax,esi
0040C945        call        @LStrClr
0040C94A>       jmp         0040C9B1
0040C94C        mov         eax,esi
0040C94E        call        @WStrClr
0040C953>       jmp         0040C9B1
0040C955        mov         eax,esi
0040C957        call        @UStrClr
0040C95C>       jmp         0040C9B1
0040C95E        mov         eax,esi
0040C960        call        @VarAddRef
0040C965>       jmp         0040C9B1
0040C967        mov         eax,dword ptr [ebx]
0040C969        mov         edx,dword ptr [ebx]
0040C96B        movzx       edx,byte ptr [edx+1]
0040C96F        add         eax,edx
0040C971        mov         dword ptr [ebp-0C],eax
0040C974        mov         eax,dword ptr [ebp-0C]
0040C977        mov         ecx,dword ptr [eax+6]
0040C97A        mov         eax,dword ptr [ebp-0C]
0040C97D        mov         eax,dword ptr [eax+0A]
0040C980        mov         edx,dword ptr [eax]
0040C982        mov         eax,esi
0040C984        call        @FinalizeArray
0040C989>       jmp         0040C9B1
0040C98B        mov         edx,dword ptr [ebx]
0040C98D        mov         eax,esi
0040C98F        call        0040C824
0040C994>       jmp         0040C9B1
0040C996        mov         eax,esi
0040C998        call        @IntfClear
0040C99D>       jmp         0040C9B1
0040C99F        mov         edx,dword ptr [ebx]
0040C9A1        mov         eax,esi
0040C9A3        call        DynArrayClear
0040C9A8>       jmp         0040C9B1
0040C9AA        mov         al,2
0040C9AC        call        Error
0040C9B1        cmp         dword ptr [ebp-10],0
0040C9B5>       ja          0040C8E9
0040C9BB        xor         eax,eax
0040C9BD        pop         edx
0040C9BE        pop         ecx
0040C9BF        pop         ecx
0040C9C0        mov         dword ptr fs:[eax],edx
0040C9C3>       jmp         0040CB47
0040C9C8>       jmp         @HandleAnyException
0040C9CD        mov         eax,dword ptr [ebp-8]
0040C9D0        mov         edx,dword ptr [ebp-10]
0040C9D3        lea         eax,[eax+edx*8+0A]
0040C9D7        mov         dword ptr [ebp-14],eax
0040C9DA        cmp         byte ptr [ebp-19],0
0040C9DE>       je          0040CA3A
0040C9E0>       jmp         0040CA32
0040C9E2        sub         dword ptr [ebp-14],8
0040C9E6        dec         dword ptr [ebp-10]
0040C9E9        xor         eax,eax
0040C9EB        push        ebp
0040C9EC        push        40CA28
0040C9F1        push        dword ptr fs:[eax]
0040C9F4        mov         dword ptr fs:[eax],esp
0040C9F7        mov         eax,dword ptr [ebp-14]
0040C9FA        mov         esi,dword ptr [eax+4]
0040C9FD        add         esi,dword ptr [ebp-4]
0040CA00        mov         eax,dword ptr [ebp-14]
0040CA03        mov         ebx,dword ptr [eax]
0040CA05        mov         eax,dword ptr [ebx]
0040CA07        movzx       eax,byte ptr [eax]
0040CA0A        sub         al,0F
0040CA0C>       jne         0040CA17
0040CA0E        mov         eax,esi
0040CA10        call        00411350
0040CA15>       jmp         0040CA1E
0040CA17        mov         al,2
0040CA19        call        Error
0040CA1E        xor         eax,eax
0040CA20        pop         edx
0040CA21        pop         ecx
0040CA22        pop         ecx
0040CA23        mov         dword ptr fs:[eax],edx
0040CA26>       jmp         0040CA32
0040CA28>       jmp         @HandleAnyException
0040CA2D        call        @DoneExcept
0040CA32        mov         eax,dword ptr [ebp-14]
0040CA35        cmp         dword ptr [eax],0
0040CA38>       jne         0040C9E2
0040CA3A        cmp         dword ptr [ebp-10],0
0040CA3E>       jbe         0040CB3D
0040CA44        sub         dword ptr [ebp-14],8
0040CA48        dec         dword ptr [ebp-10]
0040CA4B        mov         eax,dword ptr [ebp-14]
0040CA4E        mov         ebx,dword ptr [eax]
0040CA50        xor         eax,eax
0040CA52        push        ebp
0040CA53        push        40CB29
0040CA58        push        dword ptr fs:[eax]
0040CA5B        mov         dword ptr fs:[eax],esp
0040CA5E        mov         eax,dword ptr [ebp-14]
0040CA61        mov         esi,dword ptr [eax+4]
0040CA64        add         esi,dword ptr [ebp-4]
0040CA67        mov         edi,dword ptr [ebx]
0040CA69        movzx       eax,byte ptr [edi]
0040CA6C        add         eax,0FFFFFFF6
0040CA6F        cmp         eax,0C
0040CA72>       ja          0040CB18
0040CA78        jmp         dword ptr [eax*4+40CA7F]
0040CA7F        dd          0040CAB3
0040CA83        dd          0040CABC
0040CA87        dd          0040CACE
0040CA8B        dd          0040CAD7
0040CA8F        dd          0040CAF9
0040CA93        dd          0040CB04
0040CA97        dd          0040CB18
0040CA9B        dd          0040CB0D
0040CA9F        dd          0040CAC5
0040CAA3        dd          0040CB18
0040CAA7        dd          0040CB18
0040CAAB        dd          0040CB18
0040CAAF        dd          0040CAF9
0040CAB3        mov         eax,esi
0040CAB5        call        @LStrClr
0040CABA>       jmp         0040CB1F
0040CABC        mov         eax,esi
0040CABE        call        @WStrClr
0040CAC3>       jmp         0040CB1F
0040CAC5        mov         eax,esi
0040CAC7        call        @UStrClr
0040CACC>       jmp         0040CB1F
0040CACE        mov         eax,esi
0040CAD0        call        @VarAddRef
0040CAD5>       jmp         0040CB1F
0040CAD7        mov         eax,edi
0040CAD9        movzx       edx,byte ptr [edi+1]
0040CADD        add         eax,edx
0040CADF        mov         dword ptr [ebp-18],eax
0040CAE2        mov         eax,dword ptr [ebp-18]
0040CAE5        mov         ecx,dword ptr [eax+6]
0040CAE8        mov         eax,dword ptr [ebp-18]
0040CAEB        mov         eax,dword ptr [eax+0A]
0040CAEE        mov         edx,dword ptr [eax]
0040CAF0        mov         eax,esi
0040CAF2        call        @FinalizeArray
0040CAF7>       jmp         0040CB1F
0040CAF9        mov         edx,edi
0040CAFB        mov         eax,esi
0040CAFD        call        0040C824
0040CB02>       jmp         0040CB1F
0040CB04        mov         eax,esi
0040CB06        call        @IntfClear
0040CB0B>       jmp         0040CB1F
0040CB0D        mov         edx,edi
0040CB0F        mov         eax,esi
0040CB11        call        DynArrayClear
0040CB16>       jmp         0040CB1F
0040CB18        mov         al,2
0040CB1A        call        Error
0040CB1F        xor         eax,eax
0040CB21        pop         edx
0040CB22        pop         ecx
0040CB23        pop         ecx
0040CB24        mov         dword ptr fs:[eax],edx
0040CB27>       jmp         0040CB33
0040CB29>       jmp         @HandleAnyException
0040CB2E        call        @DoneExcept
0040CB33        cmp         dword ptr [ebp-10],0
0040CB37>       ja          0040CA44
0040CB3D        call        @RaiseAgain
0040CB42        call        @DoneExcept
0040CB47        mov         ebx,dword ptr [ebp-4]
0040CB4A        mov         eax,ebx
0040CB4C        pop         edi
0040CB4D        pop         esi
0040CB4E        pop         ebx
0040CB4F        mov         esp,ebp
0040CB51        pop         ebp
0040CB52        ret

0040C824,也有点像解密过程,调用之前有Array相关的内容,所以也贴上,先挂着

ReadSetupByteBlocks

BLHeli.TBLHeli.ReadSetupByteBlocks
006F5C34        push        ebp
006F5C35        mov         ebp,esp
006F5C37        push        ecx
006F5C38        mov         ecx,11
006F5C3D        push        0
006F5C3F        push        0
006F5C41        dec         ecx
006F5C42>       jne         006F5C3D
006F5C44        push        ecx
006F5C45        xchg        ecx,dword ptr [ebp-4]
006F5C48        push        ebx
006F5C49        push        esi
006F5C4A        push        edi
006F5C4B        mov         byte ptr [ebp-11],cl
006F5C4E        mov         ebx,edx
006F5C50        mov         dword ptr [ebp-0C],eax
006F5C53        lea         eax,[ebp-8]
006F5C56        mov         edx,dword ptr ds:[6DB86C];TByteBlocks
006F5C5C        call        0040C438
006F5C61        xor         eax,eax
006F5C63        push        ebp
006F5C64        push        6F64D7
006F5C69        push        dword ptr fs:[eax]
006F5C6C        mov         dword ptr fs:[eax],esp
006F5C6F        mov         dl,1
006F5C71        mov         eax,dword ptr [ebp-0C]
# 熟悉的初始化
006F5C74        call        TBLHeli.Init
006F5C79        mov         eax,dword ptr [ebp-0C]
006F5C7C        add         eax,0C0;TBLHeli.FErrMsg:string
006F5C81        call        @UStrClr
006F5C86        mov         byte ptr [ebp-12],4
006F5C8A        xor         edx,edx
006F5C8C        push        ebp
006F5C8D        push        6F6478
006F5C92        push        dword ptr fs:[edx]
006F5C95        mov         dword ptr fs:[edx],esp
006F5C98        mov         eax,dword ptr [ebx]
006F5C9A        mov         dword ptr [ebp-8],eax
006F5C9D        mov         eax,dword ptr [ebx+4]
006F5CA0        test        eax,eax
006F5CA2>       je          006F5CA9
006F5CA4        sub         eax,4
006F5CA7        mov         eax,dword ptr [eax]
006F5CA9        mov         dword ptr [ebp-10],eax
006F5CAC        cmp         dword ptr [ebp-10],0F800
# 这个地方应该是跳转了
006F5CB3>       jle         006F5CF8
006F5CB5        mov         eax,dword ptr [ebx+4]
006F5CB8        test        eax,eax
006F5CBA>       je          006F5CC1
006F5CBC        sub         eax,4
006F5CBF        mov         eax,dword ptr [eax]
006F5CC1        sub         eax,0F800
006F5CC6        mov         dword ptr [ebp-10],eax
006F5CC9        mov         eax,dword ptr [ebp-10]
006F5CCC        push        eax
006F5CCD        lea         eax,[ebp-4]
006F5CD0        mov         ecx,1
006F5CD5        mov         edx,dword ptr ds:[404CB0];TArray<System.Byte>
006F5CDB        call        @DynArraySetLength
006F5CE0        add         esp,4
006F5CE3        mov         eax,dword ptr [ebx+4]
006F5CE6        add         eax,0F800
006F5CEB        mov         ecx,dword ptr [ebp-10]
006F5CEE        mov         edx,dword ptr [ebp-4]
006F5CF1        call        Move
006F5CF6>       jmp         006F5D6C
# 这里继续
006F5CF8        cmp         dword ptr [ebp-10],7C00
006F5CFF>       jle         006F5D44
006F5D01        mov         eax,dword ptr [ebx+4]
006F5D04        test        eax,eax
006F5D06>       je          006F5D0D
006F5D08        sub         eax,4
006F5D0B        mov         eax,dword ptr [eax]
006F5D0D        sub         eax,7C00
006F5D12        mov         dword ptr [ebp-10],eax
006F5D15        mov         eax,dword ptr [ebp-10]
006F5D18        push        eax
006F5D19        lea         eax,[ebp-4]
006F5D1C        mov         ecx,1
006F5D21        mov         edx,dword ptr ds:[404CB0];TArray<System.Byte>
006F5D27        call        @DynArraySetLength
006F5D2C        add         esp,4
006F5D2F        mov         eax,dword ptr [ebx+4]
006F5D32        add         eax,7C00
006F5D37        mov         ecx,dword ptr [ebp-10]
006F5D3A        mov         edx,dword ptr [ebp-4]
006F5D3D        call        Move
006F5D42>       jmp         006F5D6C
# 继续2
006F5D44        mov         eax,dword ptr [ebp-10]
006F5D47        push        eax
006F5D48        lea         eax,[ebp-4]
006F5D4B        mov         ecx,1
006F5D50        mov         edx,dword ptr ds:[404CB0];TArray<System.Byte>
006F5D56        call        @DynArraySetLength
006F5D5B        add         esp,4
006F5D5E        mov         eax,dword ptr [ebx+4]
006F5D61        mov         ecx,dword ptr [ebp-10]
006F5D64        mov         edx,dword ptr [ebp-4]
006F5D67        call        Move
006F5D6C        cmp         dword ptr [ebp-10],90
# 跳转3
006F5D73>       jge         006F5D83
006F5D75        mov         byte ptr [ebp-12],6
006F5D79        call        @TryFinallyExit
006F5D7E>       jmp         006F6482
# 继续4
006F5D83        mov         edx,dword ptr ds:[9BE900];^gvar_009B7CE4
006F5D89        movzx       edx,byte ptr [edx]
006F5D8C        mov         eax,dword ptr [ebp-4]
# 以前没看过这个函数,放过
006F5D8F        call        006DAC28
006F5D94        test        al,al
# 跳4
006F5D96>       je          006F5DA6
006F5D98        mov         byte ptr [ebp-12],5
006F5D9C        call        @TryFinallyExit
006F5DA1>       jmp         006F6482
# 继续
006F5DA6        push        ebp
# 以前关键函数就是这个位置
006F5DA7        call        006F578C
006F5DAC        pop         ecx
006F5DAD        mov         byte ptr [ebp-12],al
006F5DB0        cmp         byte ptr [ebp-12],4
006F5DB4>       jb          006F5DC0
006F5DB6        call        @TryFinallyExit
006F5DBB>       jmp         006F6482
006F5DC0        mov         eax,dword ptr [ebp-0C]
006F5DC3        lea         edx,[eax+33];TBLHeli.FEep_ESC_Layout:TESC_Layout
006F5DC6        mov         eax,dword ptr [ebp-4]
006F5DC9        add         eax,40
006F5DCC        mov         ecx,20
# 这里就是曾经的ReadSetupFromBinString中的移动内存地址的操作,32个字节
006F5DD1        call        Move
006F5DD6        lea         edx,[ebp-1C]
006F5DD9        mov         eax,dword ptr [ebp-0C]
006F5DDC        call        006F15CC
006F5DE1        mov         edx,dword ptr [ebp-1C]
006F5DE4        mov         eax,dword ptr [ebp-0C]
006F5DE7        add         eax,0B4;TBLHeli.FESC_Layout_Org_Str:string
006F5DEC        call        @UStrAsg
006F5DF1        cmp         byte ptr [ebp-12],1
006F5DF5>       jbe         006F5E01
006F5DF7        call        @TryFinallyExit
006F5DFC>       jmp         006F6482
006F5E01        mov         eax,dword ptr [ebp-4]
006F5E04        movzx       eax,byte ptr [eax]
006F5E07        mov         edx,dword ptr [ebp-0C]
006F5E0A        mov         byte ptr [edx+4],al;TBLHeli.FEep_FW_Main_Revision:?
006F5E0D        mov         eax,dword ptr [ebp-4]
006F5E10        movzx       eax,byte ptr [eax+1]
006F5E14        mov         edx,dword ptr [ebp-0C]
006F5E17        mov         byte ptr [edx+5],al;TBLHeli.FEep_FW_Sub_Revision:byte
006F5E1A        mov         eax,dword ptr [ebp-0C]
006F5E1D        call        006F2290
006F5E22        cmp         byte ptr [ebp-12],1
006F5E26>       je          006F5E34
006F5E28        mov         eax,dword ptr [ebp-0C]
006F5E2B        call        006F2320
006F5E30        test        al,al
006F5E32>       je          006F5E48
006F5E34        mov         eax,dword ptr [ebp-0C]
006F5E37        mov         byte ptr [eax+0BC],1;TBLHeli.FIsAlternateSettingsKey:Boolean
006F5E3E        call        @TryFinallyExit
006F5E43>       jmp         006F6482
006F5E48        mov         ebx,dword ptr [ebp-4]
006F5E4B        movzx       eax,byte ptr [ebx+2]
006F5E4F        mov         edx,dword ptr [ebp-0C]
006F5E52        mov         byte ptr [edx+6],al;TBLHeli.FEep_Layout_Revision:byte
006F5E55        mov         eax,dword ptr [ebp-0C]
006F5E58        movzx       eax,byte ptr [eax+4];TBLHeli.FEep_FW_Main_Revision:?
006F5E5C        cmp         al,28
006F5E5E>       ja          006F5E64
006F5E60        cmp         al,1F
006F5E62>       jae         006F5E85
006F5E64        mov         byte ptr [ebp-12],4
006F5E68        mov         eax,dword ptr [ebp-0C]
006F5E6B        lea         edx,[eax+0C0];TBLHeli.FErrMsg:string
006F5E71        mov         eax,6EFD3C;^gvar_009C363C:HINST
006F5E76        call        UTF8Encode
006F5E7B        call        @TryFinallyExit
006F5E80>       jmp         006F6482
006F5E85        mov         eax,dword ptr [ebp-0C]
006F5E88        call        006F2248
006F5E8D        test        al,al
006F5E8F>       jne         006F5EB2
006F5E91        mov         byte ptr [ebp-12],4
006F5E95        mov         eax,dword ptr [ebp-0C]
006F5E98        lea         edx,[eax+0C0];TBLHeli.FErrMsg:string
006F5E9E        mov         eax,6EFD34;^gvar_009C363C:HINST
006F5EA3        call        UTF8Encode
006F5EA8        call        @TryFinallyExit
006F5EAD>       jmp         006F6482
006F5EB2        mov         eax,dword ptr [ebp-0C]
006F5EB5        call        006F22EC
006F5EBA        test        al,al
006F5EBC>       je          006F5ECC
006F5EBE        mov         byte ptr [ebp-12],2
006F5EC2        call        @TryFinallyExit
006F5EC7>       jmp         006F6482
006F5ECC        mov         eax,dword ptr [ebp-0C]
006F5ECF        lea         edx,[eax+73];TBLHeli.FEep_Name:TESC_Name
006F5ED2        lea         eax,[ebx+80]
006F5ED8        mov         ecx,10
006F5EDD        call        Move
006F5EE2        xor         eax,eax
006F5EE4        mov         edx,dword ptr [ebp-0C]
006F5EE7        cmp         byte ptr [edx+eax+73],0FF
006F5EEC>       jne         006F5F0F
006F5EEE        mov         byte ptr [ebp-12],4
006F5EF2        mov         eax,dword ptr [ebp-0C]
006F5EF5        lea         edx,[eax+0C0];TBLHeli.FErrMsg:string
006F5EFB        mov         eax,6EFD2C;^gvar_009C363C:HINST
006F5F00        call        UTF8Encode
006F5F05        call        @TryFinallyExit
006F5F0A>       jmp         006F6482
006F5F0F        inc         eax
006F5F10        cmp         eax,10
006F5F13>       jne         006F5EE4
006F5F15        movzx       eax,byte ptr [ebx+32]
006F5F19        mov         edx,dword ptr [ebp-0C]
006F5F1C        mov         byte ptr [edx+2B],al;TBLHeli.FEep_Hw_LED_Capable_0:byte
006F5F1F        movzx       eax,byte ptr [ebx+33]
006F5F23        mov         edx,dword ptr [ebp-0C]
006F5F26        mov         byte ptr [edx+2C],al;TBLHeli.FEep_Hw_LED_Capable_1:byte
006F5F29        movzx       eax,byte ptr [ebx+34]
006F5F2D        mov         edx,dword ptr [ebp-0C]
006F5F30        mov         byte ptr [edx+2D],al;TBLHeli.FEep_Hw_LED_Capable_2:byte
006F5F33        movzx       eax,byte ptr [ebx+35]
006F5F37        mov         edx,dword ptr [ebp-0C]
006F5F3A        mov         byte ptr [edx+2E],al;TBLHeli.FEep_Hw_LED_Capable_3:byte
006F5F3D        mov         eax,dword ptr [ebp-0C]
006F5F40        cmp         byte ptr [eax+2B],0FF;TBLHeli.FEep_Hw_LED_Capable_0:byte
006F5F44>       jne         006F5F4D
006F5F46        mov         eax,dword ptr [ebp-0C]
006F5F49        mov         byte ptr [eax+2B],0;TBLHeli.FEep_Hw_LED_Capable_0:byte
006F5F4D        mov         eax,dword ptr [ebp-0C]
006F5F50        cmp         byte ptr [eax+2C],0FF;TBLHeli.FEep_Hw_LED_Capable_1:byte
006F5F54>       jne         006F5F5D
006F5F56        mov         eax,dword ptr [ebp-0C]
006F5F59        mov         byte ptr [eax+2C],0;TBLHeli.FEep_Hw_LED_Capable_1:byte
006F5F5D        mov         eax,dword ptr [ebp-0C]
006F5F60        cmp         byte ptr [eax+2D],0FF;TBLHeli.FEep_Hw_LED_Capable_2:byte
006F5F64>       jne         006F5F6D
006F5F66        mov         eax,dword ptr [ebp-0C]
006F5F69        mov         byte ptr [eax+2D],0;TBLHeli.FEep_Hw_LED_Capable_2:byte
006F5F6D        mov         eax,dword ptr [ebp-0C]
006F5F70        cmp         byte ptr [eax+2E],0FF;TBLHeli.FEep_Hw_LED_Capable_3:byte
006F5F74>       jne         006F5F7D
006F5F76        mov         eax,dword ptr [ebp-0C]
006F5F79        mov         byte ptr [eax+2E],0;TBLHeli.FEep_Hw_LED_Capable_3:byte
006F5F7D        movzx       eax,byte ptr [ebx+30]
006F5F81        mov         edx,dword ptr [ebp-0C]
006F5F84        mov         byte ptr [edx+29],al;TBLHeli.FEep_Hw_Voltage_Sense_Capable:byte
006F5F87        movzx       eax,byte ptr [ebx+31]
006F5F8B        mov         edx,dword ptr [ebp-0C]
006F5F8E        mov         byte ptr [edx+2A],al;TBLHeli.FEep_Hw_Current_Sense_Capable:byte
006F5F91        mov         eax,dword ptr [ebp-0C]
006F5F94        cmp         byte ptr [eax+6],29;TBLHeli.FEep_Layout_Revision:byte
006F5F98>       jb          006F5FC9
006F5F9A        movzx       eax,byte ptr [ebx+3F]
006F5F9E        mov         edx,dword ptr [ebp-0C]
006F5FA1        mov         byte ptr [edx+32],al;TBLHeli.FEep_Nondamped_Capable:byte
006F5FA4        movzx       eax,byte ptr [ebx+1C]
006F5FA8        mov         edx,dword ptr [ebp-0C]
006F5FAB        mov         byte ptr [edx+20],al;TBLHeli.FEep_Note_Config:byte
006F5FAE        mov         eax,dword ptr [ebp-0C]
006F5FB1        lea         edx,[eax+83];TBLHeli.FEep_Note_Array:TEep_Note_Array
006F5FB7        lea         eax,[ebx+90]
006F5FBD        mov         ecx,30
006F5FC2        call        Move
006F5FC7>       jmp         006F5FD7
006F5FC9        mov         eax,[009BE900];^gvar_009B7CE4
006F5FCE        movzx       eax,byte ptr [eax]
006F5FD1        mov         edx,dword ptr [ebp-0C]
006F5FD4        mov         byte ptr [edx+32],al;TBLHeli.FEep_Nondamped_Capable:byte
006F5FD7        mov         eax,dword ptr [ebp-0C]
006F5FDA        cmp         byte ptr [eax+6],2C;TBLHeli.FEep_Layout_Revision:byte
006F5FDE>       jb          006F6002
006F5FE0        cmp         byte ptr [ebx+36],0FF
006F5FE4>       jae         006F6002
006F5FE6        cmp         byte ptr [ebx+37],0FF
006F5FEA>       jae         006F6002
006F5FEC        movzx       eax,byte ptr [ebx+36]
006F5FF0        mov         edx,dword ptr [ebp-0C]
006F5FF3        mov         byte ptr [edx+2F],al;TBLHeli.FEep_Hw_Pwm_Freq_Min:byte
006F5FF6        movzx       eax,byte ptr [ebx+37]
006F5FFA        mov         edx,dword ptr [ebp-0C]
006F5FFD        mov         byte ptr [edx+30],al;TBLHeli.FEep_Hw_Pwm_Freq_Max:byte
006F6000>       jmp         006F601E
006F6002        mov         eax,[009BE900];^gvar_009B7CE4
006F6007        movzx       eax,byte ptr [eax]
006F600A        mov         edx,dword ptr [ebp-0C]
006F600D        mov         byte ptr [edx+2F],al;TBLHeli.FEep_Hw_Pwm_Freq_Min:byte
006F6010        mov         eax,[009BE900];^gvar_009B7CE4
006F6015        movzx       eax,byte ptr [eax]
006F6018        mov         edx,dword ptr [ebp-0C]
006F601B        mov         byte ptr [edx+30],al;TBLHeli.FEep_Hw_Pwm_Freq_Max:byte
006F601E        mov         eax,dword ptr [ebp-0C]
006F6021        cmp         byte ptr [eax+6],2D;TBLHeli.FEep_Layout_Revision:byte
006F6025>       jb          006F6033
006F6027        movzx       eax,byte ptr [ebx+3E]
006F602B        mov         edx,dword ptr [ebp-0C]
006F602E        mov         byte ptr [edx+31],al;TBLHeli.FEep_SPORT_Capable:byte
006F6031>       jmp         006F6041
006F6033        mov         eax,[009BE900];^gvar_009B7CE4
006F6038        movzx       eax,byte ptr [eax]
006F603B        mov         edx,dword ptr [ebp-0C]
006F603E        mov         byte ptr [edx+31],al;TBLHeli.FEep_SPORT_Capable:byte
006F6041        movzx       eax,byte ptr [ebx+2F]
006F6045        mov         edx,dword ptr [ebp-0C]
006F6048        mov         byte ptr [edx+28],al;TBLHeli.FEep_FlashCounter:byte
006F604B        mov         bl,4
006F604D        mov         eax,ebx
006F604F        call        006E52DC
006F6054        movzx       edi,al
006F6057        cmp         edi,0FF
006F605D>       je          006F60F4
006F6063        mov         si,0FFFF
006F6067        mov         edx,ebx
006F6069        mov         eax,dword ptr [ebp-0C]
006F606C        call        TBLHeli.IsParameterValid
006F6071        test        al,al
006F6073>       jne         006F6086
006F6075        cmp         bl,0F
006F6078>       jne         006F60E8
006F607A        mov         eax,dword ptr [ebp-0C]
006F607D        call        TBLHeli.IsCurrentProtectionFalselyHardEnabled
006F6082        test        al,al
006F6084>       je          006F60E8
006F6086        mov         eax,dword ptr [ebp-4]
006F6089        movzx       esi,byte ptr [eax+edi]
006F608D        cmp         bl,0E
006F6090>       jne         006F60A3
006F6092        cmp         si,0FF
006F6097>       jae         006F60A3
006F6099        cmp         si,18
006F609D>       jb          006F60A3
006F609F        sub         si,18
006F60A3        mov         eax,ebx
006F60A5        call        006E52E8
006F60AA        cmp         al,1
006F60AC>       jbe         006F60BC
006F60AE        mov         eax,dword ptr [ebp-4]
006F60B1        movzx       eax,byte ptr [eax+edi+1]
006F60B6        shl         eax,8
006F60B9        add         si,ax
006F60BC        cmp         bl,11
006F60BF>       jne         006F60E8
006F60C1        mov         eax,dword ptr [ebp-0C]
006F60C4        call        TBLHeli.IsProgrammableBrakeForceCapable
006F60C9        test        al,al
006F60CB>       jne         006F60E8
006F60CD        mov         dl,11
006F60CF        mov         eax,dword ptr [ebp-0C]
006F60D2        call        TBLHeli.GetParameterMin
006F60D7        cmp         si,ax
006F60DA>       jbe         006F60E8
006F60DC        mov         dl,11
006F60DE        mov         eax,dword ptr [ebp-0C]
006F60E1        call        TBLHeli.GetParameterMax
006F60E6        mov         esi,eax
006F60E8        mov         edx,ebx
006F60EA        mov         ecx,esi
006F60EC        mov         eax,dword ptr [ebp-0C]
006F60EF        call        TBLHeli.SetParameterValueOrDefault
006F60F4        inc         ebx
006F60F5        cmp         bl,21
006F60F8>       jne         006F604D
006F60FE        mov         byte ptr [ebp-12],0
006F6102        mov         eax,dword ptr [ebp-0C]
006F6105        call        TBLHeli.FixMissingTempProt
006F610A        xor         eax,eax
006F610C        pop         edx
006F610D        pop         ecx
006F610E        pop         ecx
006F610F        mov         dword ptr fs:[eax],edx
006F6112        push        6F6482
006F6117        lea         edx,[ebp-20]
006F611A        mov         eax,dword ptr [ebp-0C]
006F611D        call        006F1544
006F6122        mov         edx,dword ptr [ebp-20]
006F6125        mov         eax,dword ptr [ebp-0C]
006F6128        add         eax,0DC;TBLHeli.FDetectedESCLayout:string
006F612D        call        @UStrAsg
006F6132        mov         eax,dword ptr [ebp-0C]
006F6135        add         eax,0DC;TBLHeli.FDetectedESCLayout:string
006F613A        mov         dword ptr [ebp-18],eax
006F613D        mov         eax,dword ptr [ebp-18]
006F6140        cmp         dword ptr [eax],0
006F6143>       jne         006F6158
006F6145        mov         eax,dword ptr [ebp-0C]
006F6148        lea         edx,[eax+0DC];TBLHeli.FDetectedESCLayout:string
006F614E        mov         eax,[009BE564];^SResString2126:TResStringRec
006F6153        call        UTF8Encode
006F6158        movzx       eax,byte ptr [ebp-12]
006F615C        cmp         eax,6
006F615F>       ja          006F642D
006F6165        jmp         dword ptr [eax*4+6F616C]
006F616C        dd          006F6188
006F6170        dd          006F619A
006F6174        dd          006F61AC
006F6178        dd          006F637E
006F617C        dd          006F6295
006F6180        dd          006F6329
006F6184        dd          006F6341
006F6188        mov         eax,dword ptr [ebp-0C]
006F618B        add         eax,0C0;TBLHeli.FErrMsg:string
006F6190        call        @UStrClr
006F6195>       jmp         006F642D
006F619A        mov         eax,dword ptr [ebp-0C]
006F619D        add         eax,0C0;TBLHeli.FErrMsg:string
006F61A2        call        @UStrClr
006F61A7>       jmp         006F642D
006F61AC        lea         eax,[ebp-24]
006F61AF        push        eax
006F61B0        lea         eax,[ebp-30]
006F61B3        push        eax
006F61B4        lea         edx,[ebp-34]
006F61B7        mov         eax,[009BE868];^SResString2117:TResStringRec
006F61BC        call        UTF8Encode
006F61C1        mov         eax,dword ptr [ebp-34]
006F61C4        push        eax
006F61C5        mov         eax,dword ptr [ebp-0C]
006F61C8        mov         eax,dword ptr [eax+0DC];TBLHeli.FDetectedESCLayout:string
006F61CE        mov         dword ptr [ebp-3C],eax
006F61D1        mov         byte ptr [ebp-38],11
006F61D5        lea         edx,[ebp-3C]
006F61D8        xor         ecx,ecx
006F61DA        pop         eax
006F61DB        call        006DA6D8
006F61E0        mov         eax,dword ptr [ebp-30]
006F61E3        mov         dword ptr [ebp-2C],eax
006F61E6        mov         byte ptr [ebp-28],11
006F61EA        lea         edx,[ebp-2C]
006F61ED        xor         ecx,ecx
006F61EF        mov         eax,6F64F8;'%s.\n'
006F61F4        call        006DA6D8
006F61F9        push        dword ptr [ebp-24]
006F61FC        lea         eax,[ebp-40]
006F61FF        push        eax
006F6200        lea         edx,[ebp-44]
006F6203        mov         eax,[009BE478];^SResString2115:TResStringRec
006F6208        call        UTF8Encode
006F620D        mov         eax,dword ptr [ebp-44]
006F6210        mov         dword ptr [ebp-54],1F
006F6217        mov         byte ptr [ebp-50],0
006F621B        mov         dword ptr [ebp-4C],64
006F6222        mov         byte ptr [ebp-48],0
006F6226        lea         edx,[ebp-54]
006F6229        mov         ecx,1
006F622E        call        006DA6D8
006F6233        push        dword ptr [ebp-40]
006F6236        lea         eax,[ebp-58]
006F6239        push        eax
006F623A        lea         edx,[ebp-5C]
006F623D        mov         eax,dword ptr [ebp-0C]
006F6240        call        006F1824
006F6245        mov         eax,dword ptr [ebp-5C]
006F6248        mov         dword ptr [ebp-2C],eax
006F624B        mov         byte ptr [ebp-28],11
006F624F        lea         eax,[ebp-2C]
006F6252        push        eax
006F6253        lea         edx,[ebp-64]
006F6256        mov         eax,[009BE9E0];^SResString2116:TResStringRec
006F625B        call        UTF8Encode
006F6260        mov         ecx,dword ptr [ebp-64]
006F6263        lea         eax,[ebp-60]
006F6266        mov         edx,6F6510;'\n'
006F626B        call        @UStrCat3
006F6270        mov         eax,dword ptr [ebp-60]
006F6273        xor         ecx,ecx
006F6275        pop         edx
006F6276        call        006DA6D8
006F627B        push        dword ptr [ebp-58]
006F627E        mov         eax,dword ptr [ebp-0C]
006F6281        add         eax,0C0;TBLHeli.FErrMsg:string
006F6286        mov         edx,3
006F628B        call        @UStrCatN
006F6290>       jmp         006F642D
006F6295        mov         eax,dword ptr [ebp-0C]
006F6298        cmp         dword ptr [eax+0C0],0;TBLHeli.FErrMsg:string
006F629F>       jne         006F62B4
006F62A1        mov         eax,dword ptr [ebp-0C]
006F62A4        lea         edx,[eax+0C0];TBLHeli.FErrMsg:string
006F62AA        mov         eax,[009BE0F8];^SResString2123:TResStringRec
006F62AF        call        UTF8Encode
006F62B4        lea         eax,[ebp-68]
006F62B7        push        eax
006F62B8        lea         eax,[ebp-6C]
006F62BB        push        eax
006F62BC        lea         edx,[ebp-70]
006F62BF        mov         eax,[009BE868];^SResString2117:TResStringRec
006F62C4        call        UTF8Encode
006F62C9        mov         eax,dword ptr [ebp-70]
006F62CC        push        eax
006F62CD        mov         eax,dword ptr [ebp-0C]
006F62D0        mov         eax,dword ptr [eax+0DC];TBLHeli.FDetectedESCLayout:string
006F62D6        mov         dword ptr [ebp-2C],eax
006F62D9        mov         byte ptr [ebp-28],11
006F62DD        lea         edx,[ebp-2C]
006F62E0        xor         ecx,ecx
006F62E2        pop         eax
006F62E3        call        006DA6D8
006F62E8        mov         eax,dword ptr [ebp-6C]
006F62EB        mov         dword ptr [ebp-54],eax
006F62EE        mov         byte ptr [ebp-50],11
006F62F2        mov         eax,dword ptr [ebp-0C]
006F62F5        mov         eax,dword ptr [eax+0C0];TBLHeli.FErrMsg:string
006F62FB        mov         dword ptr [ebp-4C],eax
006F62FE        mov         byte ptr [ebp-48],11
006F6302        lea         edx,[ebp-54]
006F6305        mov         ecx,1
006F630A        mov         eax,6F6524;'%s\n%s'
006F630F        call        006DA6D8
006F6314        mov         edx,dword ptr [ebp-68]
006F6317        mov         eax,dword ptr [ebp-0C]
006F631A        add         eax,0C0;TBLHeli.FErrMsg:string
006F631F        call        @UStrAsg
006F6324>       jmp         006F642D
006F6329        mov         eax,dword ptr [ebp-0C]
006F632C        lea         edx,[eax+0C0];TBLHeli.FErrMsg:string
006F6332        mov         eax,[009BEAEC];^SResString2122:TResStringRec
006F6337        call        UTF8Encode
006F633C>       jmp         006F642D
006F6341        lea         eax,[ebp-74]
006F6344        push        eax
006F6345        lea         edx,[ebp-78]
006F6348        mov         eax,[009BEFA8];^SResString2121:TResStringRec
006F634D        call        UTF8Encode
006F6352        mov         eax,dword ptr [ebp-78]
006F6355        mov         edx,dword ptr [ebp-10]
006F6358        mov         dword ptr [ebp-2C],edx
006F635B        mov         byte ptr [ebp-28],0
006F635F        lea         edx,[ebp-2C]
006F6362        xor         ecx,ecx
006F6364        call        006DA6D8
006F6369        mov         edx,dword ptr [ebp-74]
006F636C        mov         eax,dword ptr [ebp-0C]
006F636F        add         eax,0C0;TBLHeli.FErrMsg:string
006F6374        call        @UStrAsg
006F6379>       jmp         006F642D
006F637E        lea         eax,[ebp-7C]
006F6381        push        eax
006F6382        lea         edx,[ebp-80]
006F6385        mov         eax,dword ptr [ebp-0C]
006F6388        call        006F16AC
006F638D        mov         eax,dword ptr [ebp-80]
006F6390        mov         dword ptr [ebp-2C],eax
006F6393        mov         byte ptr [ebp-28],11
006F6397        lea         eax,[ebp-2C]
006F639A        push        eax
006F639B        lea         edx,[ebp-84]
006F63A1        mov         eax,[009BE4D4];^SResString2114:TResStringRec
006F63A6        call        UTF8Encode
006F63AB        mov         eax,dword ptr [ebp-84]
006F63B1        xor         ecx,ecx
006F63B3        pop         edx
006F63B4        call        006DA6D8
006F63B9        mov         eax,dword ptr [ebp-7C]
006F63BC        push        eax
006F63BD        lea         eax,[ebp-88]
006F63C3        push        eax
006F63C4        lea         eax,[ebp-8C]
006F63CA        push        eax
006F63CB        lea         edx,[ebp-90]
006F63D1        mov         eax,[009BE868];^SResString2117:TResStringRec
006F63D6        call        UTF8Encode
006F63DB        mov         eax,dword ptr [ebp-90]
006F63E1        push        eax
006F63E2        mov         eax,dword ptr [ebp-0C]
006F63E5        mov         eax,dword ptr [eax+0DC];TBLHeli.FDetectedESCLayout:string
006F63EB        mov         dword ptr [ebp-3C],eax
006F63EE        mov         byte ptr [ebp-38],11
006F63F2        lea         edx,[ebp-3C]
006F63F5        xor         ecx,ecx
006F63F7        pop         eax
006F63F8        call        006DA6D8
006F63FD        mov         eax,dword ptr [ebp-8C]
006F6403        mov         dword ptr [ebp-2C],eax
006F6406        mov         byte ptr [ebp-28],11
006F640A        lea         edx,[ebp-2C]
006F640D        xor         ecx,ecx
006F640F        mov         eax,6F6540;'%s\n'
006F6414        call        006DA6D8
006F6419        mov         edx,dword ptr [ebp-88]
006F641F        mov         eax,dword ptr [ebp-0C]
006F6422        add         eax,0C0;TBLHeli.FErrMsg:string
006F6427        pop         ecx
006F6428        call        @UStrCat3
006F642D        cmp         byte ptr [ebp-12],4
006F6431>       jb          006F6468
006F6433        call        006E13F0
006F6438        test        al,al
006F643A>       je          006F644A
006F643C        mov         eax,dword ptr [ebp-0C]
006F643F        mov         eax,dword ptr [eax+0C0];TBLHeli.FErrMsg:string
006F6445        call        006E1CD0
006F644A        cmp         byte ptr [ebp-11],0
006F644E>       je          006F645E
006F6450        mov         eax,dword ptr [ebp-0C]
006F6453        mov         eax,dword ptr [eax+0C0];TBLHeli.FErrMsg:string
006F6459        call        006E3F40
006F645E        xor         edx,edx
006F6460        mov         eax,dword ptr [ebp-0C]
006F6463        call        TBLHeli.Init
006F6468        movzx       eax,byte ptr [ebp-12]
006F646C        mov         edx,dword ptr [ebp-0C]
006F646F        mov         byte ptr [edx+0C4],al;TBLHeli.FStatus:TSetupStatus
006F6475        pop         eax
006F6476        jmp         eax
006F6478>       jmp         @HandleFinally
006F647D>       jmp         006F6117
006F6482        xor         eax,eax
006F6484        pop         edx
006F6485        pop         ecx
006F6486        pop         ecx
006F6487        mov         dword ptr fs:[eax],edx
006F648A        push        6F64DE
006F648F        lea         eax,[ebp-90]
006F6495        mov         edx,0F
006F649A        call        @UStrArrayClr
006F649F        lea         eax,[ebp-44]
006F64A2        mov         edx,2
006F64A7        call        @UStrArrayClr
006F64AC        lea         eax,[ebp-34]
006F64AF        mov         edx,2
006F64B4        call        @UStrArrayClr
006F64B9        lea         eax,[ebp-24]
006F64BC        mov         edx,3
006F64C1        call        @UStrArrayClr
006F64C6        lea         eax,[ebp-8]
006F64C9        mov         edx,dword ptr ds:[6DB86C];TByteBlocks
006F64CF        call        0040C824
006F64D4        pop         eax
006F64D5        jmp         eax
006F64D7>       jmp         @HandleFinally
006F64DC>       jmp         006F648F
006F64DE        movzx       eax,byte ptr [ebp-12]
006F64E2        pop         edi
006F64E3        pop         esi
006F64E4        pop         ebx
006F64E5        mov         esp,ebp
006F64E7        pop         ebp
006F64E8        ret

可以看到Block的流程中也有0040C438,而且还发现了一个关键地址0F800和7C00 ,这个是读取寄存器的地址,也是密钥计算中的一环

这里的F800的代码片段同时和以前的 ReadSetupFromBinString中的片段是一模一样的

006F578C

熟悉的结构又回来了,就是这里

BLHeli.sub_006F578C
006F578C        push        ebp
006F578D        mov         ebp,esp
006F578F        add         esp,0FFFFFFF8
006F5792        push        ebx
006F5793        lea         eax,[ebp-8]
006F5796        mov         edx,dword ptr ds:[6DB86C];TByteBlocks
006F579C        call        0040C438
006F57A1        xor         eax,eax
006F57A3        push        ebp
006F57A4        push        6F5C26
006F57A9        push        dword ptr fs:[eax]
006F57AC        mov         dword ptr fs:[eax],esp
006F57AF        mov         eax,dword ptr [ebp+8]
006F57B2        mov         eax,dword ptr [eax-0C]
006F57B5        mov         byte ptr [eax+0BA],0
006F57BC        mov         eax,dword ptr [ebp+8]
006F57BF        mov         eax,dword ptr [eax-4]
006F57C2        lea         edx,[eax+60]
006F57C5        mov         eax,dword ptr [ebp+8]
006F57C8        mov         eax,dword ptr [eax-0C]
006F57CB        call        TBLHeli.ReadMCU
006F57D0        mov         ebx,eax
006F57D2        cmp         bl,4
006F57D5>       jne         006F5C08
006F57DB        mov         eax,dword ptr [ebp+8]
006F57DE        cmp         dword ptr [eax-10],0C0
006F57E5>       jl          006F5C08
006F57EB        lea         edx,[ebp-8]
006F57EE        mov         eax,dword ptr [ebp+8]
006F57F1        add         eax,0FFFFFFF8
006F57F4        call        006F5730
006F57F9        push        0
006F57FB        push        0
006F57FD        mov         eax,dword ptr [ebp+8]
006F5800        lea         edx,[eax-8]
006F5803        mov         cx,7C00
006F5807        xor         eax,eax
# 熟悉的位置,这里应该是具体解密的算法流程
006F5809        call        006ECD68
006F580E        mov         edx,dword ptr ds:[9BE900];^gvar_009B7CE4
006F5814        movzx       edx,byte ptr [edx]
006F5817        mov         eax,dword ptr [ebp+8]
006F581A        mov         eax,dword ptr [eax-4]
006F581D        call        006DAC28
006F5822        test        al,al
006F5824>       je          006F582D
006F5826        mov         bl,5
006F5828>       jmp         006F5C08
006F582D        mov         eax,dword ptr [ebp+8]
006F5830        mov         eax,dword ptr [eax-4]
006F5833        lea         edx,[eax+60]
006F5836        mov         eax,dword ptr [ebp+8]
006F5839        mov         eax,dword ptr [eax-0C]
006F583C        call        TBLHeli.ReadMCU
006F5841        mov         ebx,eax
006F5843        cmp         bl,4
006F5846>       je          006F586F
006F5848        mov         eax,dword ptr [ebp+8]
006F584B        mov         eax,dword ptr [eax-0C]
006F584E        mov         byte ptr [eax+0BA],1
006F5855        mov         eax,dword ptr [ebp+8]
006F5858        mov         eax,dword ptr [eax-4]
006F585B        test        eax,eax
006F585D>       je          006F5864
006F585F        sub         eax,4
006F5862        mov         eax,dword ptr [eax]
006F5864        mov         edx,dword ptr [ebp+8]
006F5867        mov         dword ptr [edx-10],eax
006F586A>       jmp         006F5C08
006F586F        mov         eax,dword ptr [ebp+8]
006F5872        lea         edx,[eax-8]
006F5875        lea         eax,[ebp-8]
006F5878        call        006F5730
006F587D        push        0
006F587F        push        1
006F5881        mov         eax,dword ptr [ebp+8]
006F5884        lea         edx,[eax-8]
006F5887        mov         cx,0F800
006F588B        xor         eax,eax
006F588D        call        006ECD68
006F5892        mov         edx,dword ptr ds:[9BE900];^gvar_009B7CE4
006F5898        movzx       edx,byte ptr [edx]
006F589B        mov         eax,dword ptr [ebp+8]
006F589E        mov         eax,dword ptr [eax-4]
006F58A1        call        006DAC28
006F58A6        test        al,al
006F58A8>       je          006F58B1
006F58AA        mov         bl,5
006F58AC>       jmp         006F5C08
006F58B1        mov         eax,dword ptr [ebp+8]
006F58B4        mov         eax,dword ptr [eax-4]
006F58B7        lea         edx,[eax+60]
006F58BA        mov         eax,dword ptr [ebp+8]
006F58BD        mov         eax,dword ptr [eax-0C]
006F58C0        call        TBLHeli.ReadMCU
006F58C5        mov         ebx,eax
006F58C7        cmp         bl,4
006F58CA>       je          006F58F3
006F58CC        mov         eax,dword ptr [ebp+8]
006F58CF        mov         eax,dword ptr [eax-0C]
006F58D2        mov         byte ptr [eax+0BA],1
006F58D9        mov         eax,dword ptr [ebp+8]
006F58DC        mov         eax,dword ptr [eax-4]
006F58DF        test        eax,eax
006F58E1>       je          006F58E8
006F58E3        sub         eax,4
006F58E6        mov         eax,dword ptr [eax]
006F58E8        mov         edx,dword ptr [ebp+8]
006F58EB        mov         dword ptr [edx-10],eax
006F58EE>       jmp         006F5C08
006F58F3        mov         eax,dword ptr [ebp+8]
006F58F6        lea         edx,[eax-8]
006F58F9        lea         eax,[ebp-8]
006F58FC        call        006F5730
006F5901        push        1
006F5903        push        0
006F5905        mov         eax,dword ptr [ebp+8]
006F5908        lea         edx,[eax-8]
006F590B        mov         cx,7C00
006F590F        xor         eax,eax
006F5911        call        006ECD68
006F5916        mov         edx,dword ptr ds:[9BE900];^gvar_009B7CE4
006F591C        movzx       edx,byte ptr [edx]
006F591F        mov         eax,dword ptr [ebp+8]
006F5922        mov         eax,dword ptr [eax-4]
006F5925        call        006DAC28
006F592A        test        al,al
006F592C>       je          006F5935
006F592E        mov         bl,5
006F5930>       jmp         006F5C08
006F5935        mov         eax,dword ptr [ebp+8]
006F5938        mov         eax,dword ptr [eax-4]
006F593B        lea         edx,[eax+60]
006F593E        mov         eax,dword ptr [ebp+8]
006F5941        mov         eax,dword ptr [eax-0C]
006F5944        call        TBLHeli.ReadMCU
006F5949        mov         ebx,eax
006F594B        cmp         bl,4
006F594E>       je          006F5979
006F5950        mov         eax,dword ptr [ebp+8]
006F5953        mov         eax,dword ptr [eax-0C]
006F5956        mov         byte ptr [eax+0BA],1
006F595D        mov         eax,dword ptr [ebp+8]
006F5960        mov         eax,dword ptr [eax-4]
006F5963        test        eax,eax
006F5965>       je          006F596C
006F5967        sub         eax,4
006F596A        mov         eax,dword ptr [eax]
006F596C        mov         edx,dword ptr [ebp+8]
006F596F        mov         dword ptr [edx-10],eax
006F5972        mov         bl,1
006F5974>       jmp         006F5C08
006F5979        mov         eax,dword ptr [ebp+8]
006F597C        lea         edx,[eax-8]
006F597F        lea         eax,[ebp-8]
006F5982        call        006F5730
006F5987        push        1
006F5989        push        1
006F598B        mov         eax,dword ptr [ebp+8]
006F598E        lea         edx,[eax-8]
006F5991        mov         cx,0F800
006F5995        xor         eax,eax
006F5997        call        006ECD68
006F599C        mov         edx,dword ptr ds:[9BE900];^gvar_009B7CE4
006F59A2        movzx       edx,byte ptr [edx]
006F59A5        mov         eax,dword ptr [ebp+8]
006F59A8        mov         eax,dword ptr [eax-4]
006F59AB        call        006DAC28
006F59B0        test        al,al
006F59B2>       je          006F59BB
006F59B4        mov         bl,5
006F59B6>       jmp         006F5C08
006F59BB        mov         eax,dword ptr [ebp+8]
006F59BE        mov         eax,dword ptr [eax-4]
006F59C1        lea         edx,[eax+60]
006F59C4        mov         eax,dword ptr [ebp+8]
006F59C7        mov         eax,dword ptr [eax-0C]
006F59CA        call        TBLHeli.ReadMCU
006F59CF        mov         ebx,eax
006F59D1        cmp         bl,4
006F59D4>       je          006F59FF
006F59D6        mov         eax,dword ptr [ebp+8]
006F59D9        mov         eax,dword ptr [eax-0C]
006F59DC        mov         byte ptr [eax+0BA],1
006F59E3        mov         eax,dword ptr [ebp+8]
006F59E6        mov         eax,dword ptr [eax-4]
006F59E9        test        eax,eax
006F59EB>       je          006F59F2
006F59ED        sub         eax,4
006F59F0        mov         eax,dword ptr [eax]
006F59F2        mov         edx,dword ptr [ebp+8]
006F59F5        mov         dword ptr [edx-10],eax
006F59F8        mov         bl,1
006F59FA>       jmp         006F5C08
006F59FF        mov         eax,dword ptr [ebp+8]
006F5A02        lea         edx,[eax-8]
006F5A05        lea         eax,[ebp-8]
006F5A08        call        006F5730
006F5A0D        push        0
006F5A0F        push        0
006F5A11        mov         eax,dword ptr [ebp+8]
006F5A14        lea         edx,[eax-8]
006F5A17        mov         cx,7C00
006F5A1B        mov         al,1
006F5A1D        call        006ECD68
006F5A22        mov         edx,dword ptr ds:[9BE900];^gvar_009B7CE4
006F5A28        movzx       edx,byte ptr [edx]
006F5A2B        mov         eax,dword ptr [ebp+8]
006F5A2E        mov         eax,dword ptr [eax-4]
006F5A31        call        006DAC28
006F5A36        test        al,al
006F5A38>       je          006F5A41
006F5A3A        mov         bl,5
006F5A3C>       jmp         006F5C08
006F5A41        mov         eax,dword ptr [ebp+8]
006F5A44        mov         eax,dword ptr [eax-4]
006F5A47        lea         edx,[eax+60]
006F5A4A        mov         eax,dword ptr [ebp+8]
006F5A4D        mov         eax,dword ptr [eax-0C]
006F5A50        call        TBLHeli.ReadMCU
006F5A55        mov         ebx,eax
006F5A57        cmp         bl,4
006F5A5A>       je          006F5A83
006F5A5C        mov         eax,dword ptr [ebp+8]
006F5A5F        mov         eax,dword ptr [eax-0C]
006F5A62        mov         byte ptr [eax+0BA],1
006F5A69        mov         eax,dword ptr [ebp+8]
006F5A6C        mov         eax,dword ptr [eax-4]
006F5A6F        test        eax,eax
006F5A71>       je          006F5A78
006F5A73        sub         eax,4
006F5A76        mov         eax,dword ptr [eax]
006F5A78        mov         edx,dword ptr [ebp+8]
006F5A7B        mov         dword ptr [edx-10],eax
006F5A7E>       jmp         006F5C08
006F5A83        mov         eax,dword ptr [ebp+8]
006F5A86        lea         edx,[eax-8]
006F5A89        lea         eax,[ebp-8]
006F5A8C        call        006F5730
006F5A91        push        0
006F5A93        push        1
006F5A95        mov         eax,dword ptr [ebp+8]
006F5A98        lea         edx,[eax-8]
006F5A9B        mov         cx,0F800
006F5A9F        mov         al,1
006F5AA1        call        006ECD68
006F5AA6        mov         edx,dword ptr ds:[9BE900];^gvar_009B7CE4
006F5AAC        movzx       edx,byte ptr [edx]
006F5AAF        mov         eax,dword ptr [ebp+8]
006F5AB2        mov         eax,dword ptr [eax-4]
006F5AB5        call        006DAC28
006F5ABA        test        al,al
006F5ABC>       je          006F5AC5
006F5ABE        mov         bl,5
006F5AC0>       jmp         006F5C08
006F5AC5        mov         eax,dword ptr [ebp+8]
006F5AC8        mov         eax,dword ptr [eax-4]
006F5ACB        lea         edx,[eax+60]
006F5ACE        mov         eax,dword ptr [ebp+8]
006F5AD1        mov         eax,dword ptr [eax-0C]
006F5AD4        call        TBLHeli.ReadMCU
006F5AD9        mov         ebx,eax
006F5ADB        cmp         bl,4
006F5ADE>       je          006F5B07
006F5AE0        mov         eax,dword ptr [ebp+8]
006F5AE3        mov         eax,dword ptr [eax-0C]
006F5AE6        mov         byte ptr [eax+0BA],1
006F5AED        mov         eax,dword ptr [ebp+8]
006F5AF0        mov         eax,dword ptr [eax-4]
006F5AF3        test        eax,eax
006F5AF5>       je          006F5AFC
006F5AF7        sub         eax,4
006F5AFA        mov         eax,dword ptr [eax]
006F5AFC        mov         edx,dword ptr [ebp+8]
006F5AFF        mov         dword ptr [edx-10],eax
006F5B02>       jmp         006F5C08
006F5B07        mov         eax,dword ptr [ebp+8]
006F5B0A        lea         edx,[eax-8]
006F5B0D        lea         eax,[ebp-8]
006F5B10        call        006F5730
006F5B15        push        1
006F5B17        push        0
006F5B19        mov         eax,dword ptr [ebp+8]
006F5B1C        lea         edx,[eax-8]
006F5B1F        mov         cx,7C00
006F5B23        mov         al,1
006F5B25        call        006ECD68
006F5B2A        mov         edx,dword ptr ds:[9BE900];^gvar_009B7CE4
006F5B30        movzx       edx,byte ptr [edx]
006F5B33        mov         eax,dword ptr [ebp+8]
006F5B36        mov         eax,dword ptr [eax-4]
006F5B39        call        006DAC28
006F5B3E        test        al,al
006F5B40>       je          006F5B49
006F5B42        mov         bl,5
006F5B44>       jmp         006F5C08
006F5B49        mov         eax,dword ptr [ebp+8]
006F5B4C        mov         eax,dword ptr [eax-4]
006F5B4F        lea         edx,[eax+60]
006F5B52        mov         eax,dword ptr [ebp+8]
006F5B55        mov         eax,dword ptr [eax-0C]
006F5B58        call        TBLHeli.ReadMCU
006F5B5D        mov         ebx,eax
006F5B5F        cmp         bl,4
006F5B62>       je          006F5B8A
006F5B64        mov         eax,dword ptr [ebp+8]
006F5B67        mov         eax,dword ptr [eax-0C]
006F5B6A        mov         byte ptr [eax+0BA],1
006F5B71        mov         eax,dword ptr [ebp+8]
006F5B74        mov         eax,dword ptr [eax-4]
006F5B77        test        eax,eax
006F5B79>       je          006F5B80
006F5B7B        sub         eax,4
006F5B7E        mov         eax,dword ptr [eax]
006F5B80        mov         edx,dword ptr [ebp+8]
006F5B83        mov         dword ptr [edx-10],eax
006F5B86        mov         bl,1
006F5B88>       jmp         006F5C08
006F5B8A        mov         eax,dword ptr [ebp+8]
006F5B8D        lea         edx,[eax-8]
006F5B90        lea         eax,[ebp-8]
006F5B93        call        006F5730
006F5B98        push        1
006F5B9A        push        1
006F5B9C        mov         eax,dword ptr [ebp+8]
006F5B9F        lea         edx,[eax-8]
006F5BA2        mov         cx,0F800
006F5BA6        mov         al,1
006F5BA8        call        006ECD68
006F5BAD        mov         edx,dword ptr ds:[9BE900];^gvar_009B7CE4
006F5BB3        movzx       edx,byte ptr [edx]
006F5BB6        mov         eax,dword ptr [ebp+8]
006F5BB9        mov         eax,dword ptr [eax-4]
006F5BBC        call        006DAC28
006F5BC1        test        al,al
006F5BC3>       je          006F5BC9
006F5BC5        mov         bl,5
006F5BC7>       jmp         006F5C08
006F5BC9        mov         eax,dword ptr [ebp+8]
006F5BCC        mov         eax,dword ptr [eax-4]
006F5BCF        lea         edx,[eax+60]
006F5BD2        mov         eax,dword ptr [ebp+8]
006F5BD5        mov         eax,dword ptr [eax-0C]
006F5BD8        call        TBLHeli.ReadMCU
006F5BDD        mov         ebx,eax
006F5BDF        cmp         bl,4
006F5BE2>       je          006F5C08
006F5BE4        mov         eax,dword ptr [ebp+8]
006F5BE7        mov         eax,dword ptr [eax-0C]
006F5BEA        mov         byte ptr [eax+0BA],1
006F5BF1        mov         eax,dword ptr [ebp+8]
006F5BF4        mov         eax,dword ptr [eax-4]
006F5BF7        test        eax,eax
006F5BF9>       je          006F5C00
006F5BFB        sub         eax,4
006F5BFE        mov         eax,dword ptr [eax]
006F5C00        mov         edx,dword ptr [ebp+8]
006F5C03        mov         dword ptr [edx-10],eax
006F5C06        mov         bl,1
006F5C08        xor         eax,eax
006F5C0A        pop         edx
006F5C0B        pop         ecx
006F5C0C        pop         ecx
006F5C0D        mov         dword ptr fs:[eax],edx
006F5C10        push        6F5C2D
006F5C15        lea         eax,[ebp-8]
006F5C18        mov         edx,dword ptr ds:[6DB86C];TByteBlocks
006F5C1E        call        0040C824
006F5C23        pop         eax
006F5C24        jmp         eax
006F5C26>       jmp         @HandleFinally
006F5C2B>       jmp         006F5C15
006F5C2D        mov         eax,ebx
006F5C2F        pop         ebx
006F5C30        pop         ecx
006F5C31        pop         ecx
006F5C32        pop         ebp
006F5C33        ret

006ECD68

BLHeli.sub_006ECD68
006ECD68        push        ebp
006ECD69        mov         ebp,esp
006ECD6B        add         esp,0FFFFFFEC
006ECD6E        push        ebx
006ECD6F        push        esi
006ECD70        push        edi
006ECD71        xor         ebx,ebx
006ECD73        mov         dword ptr [ebp-4],ebx
006ECD76        mov         dword ptr [ebp-8],ebx
006ECD79        mov         word ptr [ebp-0C],cx
006ECD7D        mov         esi,edx
006ECD7F        mov         byte ptr [ebp-9],al
006ECD82        xor         eax,eax
006ECD84        push        ebp
006ECD85        push        6ECF39
006ECD8A        push        dword ptr fs:[eax]
006ECD8D        mov         dword ptr fs:[eax],esp
006ECD90        mov         edx,dword ptr [esi]
006ECD92        test        edx,edx
006ECD94>       jne         006ECD9A
006ECD96        mov         al,1
006ECD98>       jmp         006ECDAB
006ECD9A        mov         eax,dword ptr [esi+4]
006ECD9D        test        eax,eax
006ECD9F>       je          006ECDA6
006ECDA1        sub         eax,4
006ECDA4        mov         eax,dword ptr [eax]
006ECDA6        cmp         eax,edx
006ECDA8        setle       al
006ECDAB        test        al,al
006ECDAD>       je          006ECDCE
006ECDAF        movzx       eax,byte ptr [ebp+0C]
006ECDB3        push        eax
006ECDB4        movzx       eax,byte ptr [ebp+8]
006ECDB8        push        eax
006ECDB9        lea         edx,[esi+4]
006ECDBC        movzx       ecx,word ptr [ebp-0C]
006ECDC0        movzx       eax,byte ptr [ebp-9]
006ECDC4        call        006ECD34
006ECDC9>       jmp         006ECF16
006ECDCE        mov         word ptr [ebp-12],0
006ECDD4        mov         word ptr [ebp-0E],0
006ECDDA        lea         eax,[ebp-8]
006ECDDD        mov         edx,dword ptr ds:[404CB0];TArray<System.Byte>
006ECDE3        call        DynArrayClear
006ECDE8        movzx       edx,byte ptr [ebp+8]
006ECDEC        movzx       eax,word ptr [ebp-0C]
006ECDF0        call        006EC638
006ECDF5        call        006EC684
006ECDFA        mov         byte ptr [ebp-0F],al
006ECDFD        mov         eax,dword ptr [esi+4]
006ECE00        test        eax,eax
006ECE02>       je          006ECE09
006ECE04        sub         eax,4
006ECE07        mov         eax,dword ptr [eax]
006ECE09        mov         edi,eax
006ECE0B        cmp         edi,1
006ECE0E>       jle         006ECEBE
006ECE14        mov         ebx,edi
006ECE16        cmp         ebx,dword ptr [esi]
006ECE18>       jle         006ECE1C
006ECE1A        mov         ebx,dword ptr [esi]
006ECE1C        push        ebx
006ECE1D        lea         eax,[ebp-4]
006ECE20        mov         ecx,1
006ECE25        mov         edx,dword ptr ds:[404CB0];TArray<System.Byte>
006ECE2B        call        @DynArraySetLength
006ECE30        add         esp,4
006ECE33        movzx       eax,word ptr [ebp-12]
006ECE37        mov         edx,dword ptr [esi+4]
006ECE3A        lea         eax,[edx+eax]
006ECE3D        mov         ecx,ebx
006ECE3F        mov         edx,dword ptr [ebp-4]
006ECE42        call        Move
006ECE47        cmp         byte ptr [ebp-9],0
006ECE4B>       je          006ECE68
006ECE4D        movzx       eax,byte ptr [ebp+8]
006ECE51        push        eax
006ECE52        movzx       edx,word ptr [ebp-0C]
006ECE56        add         dx,word ptr [ebp-0E]
006ECE5A        lea         eax,[ebp-4]
006ECE5D        movzx       ecx,byte ptr [ebp+0C]
006ECE61        call        006ECB8C
006ECE66>       jmp         006ECE81
006ECE68        movzx       eax,byte ptr [ebp+8]
006ECE6C        push        eax
006ECE6D        movzx       edx,word ptr [ebp-0C]
006ECE71        add         dx,word ptr [ebp-0E]
006ECE75        lea         eax,[ebp-4]
006ECE78        movzx       ecx,byte ptr [ebp+0C]
006ECE7C        call        006EC84C
006ECE81        add         word ptr [ebp-12],bx
006ECE85        sub         edi,ebx
006ECE87        cmp         byte ptr [ebp-0F],0
006ECE8B>       je          006ECEA0
006ECE8D        test        ebx,ebx
006ECE8F>       jns         006ECE94
006ECE91        add         ebx,3
006ECE94        sar         ebx,2
006ECE97        lea         eax,[ebx+ebx*2]
006ECE9A        add         word ptr [ebp-0E],ax
006ECE9E>       jmp         006ECEA4
006ECEA0        add         word ptr [ebp-0E],bx
006ECEA4        lea         eax,[ebp-8]
006ECEA7        mov         edx,dword ptr [ebp-4]
006ECEAA        mov         ecx,dword ptr ds:[404CB0];TArray<System.Byte>
006ECEB0        call        0040E258
006ECEB5        cmp         edi,1
006ECEB8>       jg          006ECE14
006ECEBE        mov         ebx,dword ptr [ebp-8]
006ECEC1        test        ebx,ebx
006ECEC3>       je          006ECECA
006ECEC5        sub         ebx,4
006ECEC8        mov         ebx,dword ptr [ebx]
006ECECA        push        ebx
006ECECB        lea         eax,[esi+4]
006ECECE        mov         ecx,1
006ECED3        mov         edx,dword ptr ds:[404CB0];TArray<System.Byte>
006ECED9        call        @DynArraySetLength
006ECEDE        add         esp,4
006ECEE1        mov         eax,dword ptr [ebp-8]
006ECEE4        test        eax,eax
006ECEE6>       je          006ECEED
006ECEE8        sub         eax,4
006ECEEB        mov         eax,dword ptr [eax]
006ECEED        mov         edx,dword ptr [esi+4]
006ECEF0        mov         ecx,eax
006ECEF2        mov         eax,dword ptr [ebp-8]
006ECEF5        call        Move
006ECEFA        mov         eax,dword ptr [ebp-8]
006ECEFD        test        eax,eax
006ECEFF>       je          006ECF06
006ECF01        sub         eax,4
006ECF04        mov         eax,dword ptr [eax]
006ECF06        xor         ecx,ecx
006ECF08        mov         edx,eax
006ECF0A        mov         eax,dword ptr [ebp-8]
006ECF0D        call        @FillChar
006ECF12        xor         eax,eax
006ECF14        mov         dword ptr [esi],eax
006ECF16        xor         eax,eax
006ECF18        pop         edx
006ECF19        pop         ecx
006ECF1A        pop         ecx
006ECF1B        mov         dword ptr fs:[eax],edx
006ECF1E        push        6ECF40
006ECF23        lea         eax,[ebp-8]
006ECF26        mov         edx,dword ptr ds:[404CB0];TArray<System.Byte>
006ECF2C        mov         ecx,2
006ECF31        call        @FinalizeArray
006ECF36        pop         eax
006ECF37        jmp         eax
006ECF39>       jmp         @HandleFinally
006ECF3E>       jmp         006ECF23
006ECF40        pop         edi
006ECF41        pop         esi
006ECF42        pop         ebx
006ECF43        mov         esp,ebp
006ECF45        pop         ebp
006ECF46        ret         8

这里就是新的解密的代码,对比了一下之前的结构,这里变化比较大,不太一样了

Summary

后续发现是个乌龙,测试版密钥和之前一样,只有BLHliSuite32因为代码更新,部分函数有些变化了而已

实际上通过逆向确实看到了之前一些需要在线验证的内容和以前用的激活key的界面