飘云阁(PYG官方论坛)

 找回密码
 加入论坛

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 73|回复: 0

[第十六轮] PYG5.4第十六期第七题爆破分析过程

[复制链接]
  • TA的每日心情
    开心
    昨天 11:48
  • 签到天数: 814 天

    [LV.10]以坛为家III

    发表于 6 天前 | 显示全部楼层 |阅读模式
    软件名称:BinaryNinja
    推荐级别:中
    软件介绍:反编译工具,QT,keyfile 验证。
    游戏规则:算法分析 or 爆破
    一、老规矩,软件先查壳,无壳
    Qt(5.6.0.0)[-]
    Microsoft Visual C++(-)[-]
    Microsoft Linker(14.0)[EXE64,signed]
    二、运行软件,需要导入KEY文件,我们导入先伪造好的假KEY文件,出现错误提示
    001.png
    三、调试分析
    因为是64位软件,本次用的调试器为x64dbg,第一次,还不是很熟悉,适应了一会,感觉还不错,用x64dbg载入调试软件,
    单击右键,点击搜索——所有模块——字符串,搜索到128400个字符串,在搜到的字符串再次搜索“The provided license is invalid”字符串,搜到两个结果                          
    00007FF6B3CBD540"The provided license is invalid."
    00007FF6B3CBD98A"The provided license is invalid."
    双击来到反汇编代码处,第一处
    00007FF6B3CBD522call <binaryninja.BNIsLicenseValidated> 可能是关键CALL
    00007FF6B3CBD527test al,al
    00007FF6B3CBD529 jne binaryninja.7FF6B3CBDA94     ;可以跳过错误提示
    00007FF6B3CBD52F  mov dword ptr ss:[rbp+138],103
    00007FF6B3CBD539 mov dword ptr ss:[rbp+13C],r13d
    00007FF6B3CBD540  lea rax,qword ptr ds:[7FF6B3DB4768] "Theprovided license is invalid."
    00007FF6B3CBD547 lea r14,qword ptr ds:[7FF6B3DB43E8]"Error"
    00007FF6B3CBD54E  learcx,qword ptr ds:[7FF6B3DB4790]               
    00007FF6B3CBD555 lea rbx,qword ptr ds:[7FF6B3DB48E8]
    00007FF6B3CBD55C  nop dword ptr ds:[rax]
    00007FF6B3CBD560  test dil,dil                                      
    第二处
    00007FF6B3CBD983  call<binaryninja.BNIsLicenseValidated> 可能是关键CALL
    00007FF6B3CBD988  test al,al                                
    00007FF6B3CBD98A  lea rax,qword ptr ds:[7FF6B3DB4768]  "The provided license is invalid."
    00007FF6B3CBD991  lea rcx,qword ptr ds:[7FF6B3DB4790]      
    00007FF6B3CBD998  lea rbx,qword ptr ds:[7FF6B3DB48E8]      
    00007FF6B3CBD99F  je binaryninja.7FF6B3CBD560               
    00007FF6B3CBD9A5  test dil,dil                              
    00007FF6B3CBD9A8  jebinaryninja.7FF6B3CBDA94             
    00007FF6B3CBD9AE  mov edx,54                                
    00007FF6B3CBD9B3  lea rcx,qword ptr ds:[7FF6B3DB4700]      
    00007FF6B3CBD9BA  call qword ptrds:[<&QString::fromAscii_h
    继然是调试,我们修改各处代码试试,先在00007FF6B3CBD529下断点,重新启动软件,断了下到,修改寄存器,使其跳转实现,软件直接运行起来,打开一个软件试试,只能显示16进制代码,不能显示反汇编及图示跳转
    002 002.png
    第二次在00007FF6B3CBD983处下个断点,重启软件,导入假的KEY文件,断在00007FF6B3CBD983处,F7进入CALL内,发现一个内存值正在赋给EAX,非常可疑,我们修改这个内存值为1,
    00007FFE4384ABB0  movzx eax,byte ptr ds:[7FFE446300D0]    ;[7FFE446300D0]值修改为1
    00007FFE4384ABB7  ret   
    继续运行软件,出现提示框
    003 003.png
    打开一个软件试试,只能显示16进制代码,还是不能显示反汇编及图示跳转,说明还是没有找到程序的关键点
    重新运行软件,导入假的KEY文件,断在00007FF6B3CBD983处,F7进入CALL内,单击右键,点击查找引用——地址:7FFE446300D0,找到3个结果
    00007FFE43849339cmp byte ptr ds:[7FFE446300D0],0
    00007FFE4384A826mov byte ptr ds:[7FFE446300D0],1
    00007FFE4384ABB0movzx eax,byte ptr ds:[7FFE446300D0]
    00007FFE4384A826处就是关键了,正在给关键内存赋值为1                         
    00007FFE4384A81A  call binaryninjacore.7FFE4364B9E0      
    00007FFE4384A81F  xor al,al                              
    00007FFE4384A821  jmp binaryninjacore.7FFE4384A929        
    往上翻翻,来到段首,下个断点,进行单步调试,发现上有3处关键,第一处是
    00007FFE43849796  jebinaryninjacore.7FFE43849894         ;该处跳转必需实现,修改为jmp
    00007FFE4384979C  lea rcx,qword ptr ss:[rsp+80]           
    00007FFE438497A4  call <binaryninjacore.git_oidarray_free
    00007FFE438497A9  nop                                    
    00007FFE438497AA  lea rcx,qword ptr ss:[rsp+90]           
    00007FFE438497B2  call <binaryninjacore.git_oidarray_free
    00007FFE438497B7  nop                                    
    00007FFE438497B8  lea rcx,qword ptr ss:[rsp+190]         
    00007FFE438497C0  call binaryninjacore.7FFE43646690      
    00007FFE438497C5  nop                                    
    00007FFE438497C6  lea rcx,qword ptr ss:[rsp+1B0]         
    00007FFE438497CE  call binaryninjacore.7FFE43646690      
    00007FFE438497D3nop                                    
    00007FFE438497D4  lea rcx,qword ptr ss:[rsp+150]         
    00007FFE438497DC  call binaryninjacore.7FFE43646690      
    00007FFE438497E1  nop                                    
    00007FFE438497E2  lea rcx,qword ptr ss:[rsp+1D0]         
    00007FFE438497EAcall binaryninjacore.7FFE43646690      
    00007FFE438497EF  nop                                    
    00007FFE438497F0  lea rcx,qword ptr ss:[rsp+1F0]         
    00007FFE438497F8  call binaryninjacore.7FFE43646690      
    00007FFE438497FD  nop                                    
    00007FFE438497FE  lea rcx,qword ptr ss:[rsp+170]         
    00007FFE43849806  call binaryninjacore.7FFE43646690      
    00007FFE4384980B  nop                                    
    00007FFE4384980C  lea rcx,qword ptr ss:[rsp+A8]           
    00007FFE43849814  call binaryninjacore.7FFE439447F0      
    00007FFE43849819  nop                                    
    00007FFE4384981A  lea rcx,qword ptr ss:[rsp+2A8]         
    00007FFE43849822  call binaryninjacore.7FFE43646690      
    00007FFE43849827  lea rcx,qword ptr ss:[rsp+260]         
    00007FFE4384982F  call binaryninjacore.7FFE43646690      
    00007FFE43849834  lea rcx,qword ptr ss:[rsp+238]         
    00007FFE4384983C  call binaryninjacore.7FFE43672CD0      
    00007FFE43849841  mov rcx,qword ptr ss:[rsp+238]         
    00007FFE43849849  call binaryninjacore.7FFE43CBB560      
    00007FFE4384984E  mov qword ptr ss:[rsp+238],r14         
    00007FFE43849856  lea rcx,qword ptr ss:[rsp+210]         
    00007FFE4384985E  call binaryninjacore.7FFE43A78E90      
    00007FFE43849863  mov rcx,qword ptr ss:[rsp+210]         
    00007FFE4384986B  call binaryninjacore.7FFE43CBB560      
    00007FFE43849870  mov qword ptr ss:[rsp+210],r14         
    00007FFE43849878  lea rcx,qword ptr ss:[rsp+70]           
    00007FFE4384987D  call <binaryninjacore.git_oidarray_free
    00007FFE43849882  nop                                    
    00007FFE43849883  lea rcx,qword ptr ss:[rsp+60]           
    00007FFE43849888  call binaryninjacore.7FFE4364B9E0      
    00007FFE4384988D  xor al,al                              
    00007FFE4384988F jmp binaryninjacore.7FFE4384A929  ;该处能跳过关键赋值处00007FFE4384ABB0
    00007FFE43849894  mov rax,qword ptr ss:[rsp+90]           
    00007FFE4384989C  lea rcx,qword ptr ss:[rsp+2F0]   
    同理其它两处是
    00007FFE43849C6C  je binaryninjacore.7FFE43849D75  ;该处跳转必需实现,修改为jmp
    00007FFE43849D7D  jne binaryninjacore.7FFE43849E36 ;该处跳转必需实现,修改为jmp
    继续运行软件,出现注册成功提示
    004 004.png
    打开一个软件试试,能显示反汇编及图示跳转,说明破解成功
    005 005.png
    点击帮助——关于,没有注册信息,说明破解不是很完美
    006 006.png
    后来听校长说要搞定签名,才显示注册信息,由于对算法和64位汇编不是很熟悉,跟踪了好久也没找到关键,只有放弃了。

    您需要登录后才可以回帖 登录 | 加入论坛

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    快速回复 返回顶部 返回列表