首页
社区
课程
招聘
[第二阶段第4题]攻防竞赛第二阶段第4题(攻击篇)答题
发表于: 2014-11-3 18:35 9426

[第二阶段第4题]攻防竞赛第二阶段第4题(攻击篇)答题

2014-11-3 18:35
9426

分析文章

//定位 native crackme(String paramString1, String paramString2);函数,通过查看安卓源码Dalvik虚拟机JNI方法的注册过程得知,在dvmUseJNIBridge函数下断, 就会得到native crackme函数的内存地址:

//-------------crackme函数
libcrackme.so:80506714 PUSH            {R3-R7,LR}
libcrackme.so:80506716 MOVS            R7, R3
libcrackme.so:80506718 LDR             R3, [R0]
libcrackme.so:8050671A MOVS            R5, #0x2A4
libcrackme.so:8050671E LDR             R3, [R3,R5]
libcrackme.so:80506720 MOVS            R1, R2
libcrackme.so:80506722 MOVS            R2, #0
libcrackme.so:80506724 MOVS            R4, R0
libcrackme.so:80506726 BLX             R3                      ; 获得输入框中帐户
libcrackme.so:80506728 LDR             R3, [R4]
libcrackme.so:8050672A MOVS            R6, R0
libcrackme.so:8050672C MOVS            R1, R7
libcrackme.so:8050672E LDR             R3, [R3,R5]
libcrackme.so:80506730 MOVS            R2, #0
libcrackme.so:80506732 MOVS            R0, R4
libcrackme.so:80506734 BLX             R3                      ; 获得输入框中密码
libcrackme.so:80506736 MOVS            R1, R0
libcrackme.so:80506738 MOVS            R0, R6
libcrackme.so:8050673A BL              unk_80506610

//-----------判断账户长度与密码长度是否合法
libcrackme.so:80506586 BL              loc_80505E54            ; 判断账户长度与密码长度是否合法

libcrackme.so:80505E54 PUSH            {R4-R6,LR}
libcrackme.so:80505E56 LDR             R4, =(unk_80515F4C - 0x80505E5E)
libcrackme.so:80505E58 LDR             R3, [R0,#0x34]
libcrackme.so:80505E5A ADD             R4, PC ; unk_80515F4C
libcrackme.so:80505E5C CMP             R3, #0
libcrackme.so:80505E5E BEQ             loc_80505E80
libcrackme.so:80505E60 LDR             R5, [R0,#0x38]
libcrackme.so:80505E62 CMP             R5, #0
libcrackme.so:80505E64 BEQ             loc_80505E80
libcrackme.so:80505E66 MOVS            R0, R3
libcrackme.so:80505E68 BLX             strlen_0                ; 帐户长度
libcrackme.so:80505E6C MOVS            R6, R0
libcrackme.so:80505E6E SUBS            R6, #8
libcrackme.so:80505E70 MOVS            R0, R5
libcrackme.so:80505E72 BLX             strlen_0                ; 密码长度
libcrackme.so:80505E76 CMP             R6, #0x16
libcrackme.so:80505E78 BHI             loc_80505E80
libcrackme.so:80505E7A SUBS            R0, #0xC
libcrackme.so:80505E7C CMP             R0, #0x58
libcrackme.so:80505E7E BLS             loc_80505E94

//--------帐户每一个数值循环0x100次与一个表进行计算,得到8字节数值 (表大小为0x100)

libcrackme.so:80505D8E loc_80505D8E                            ; CODE XREF: libcrackme.so:80505E34j
libcrackme.so:80505D8E LDR             R0, [SP,#0x18]          ; 开始
libcrackme.so:80505D90 BLX             setjmp_0
libcrackme.so:80505D94 CMP             R0, #0
libcrackme.so:80505D96 BEQ             loc_80505D9E
libcrackme.so:80505D98 BLX             sub_80507D64
libcrackme.so:80505D9C B               loc_80505DA8
libcrackme.so:80505D9E ; ---------------------------------------------------------------------------
libcrackme.so:80505D9E
libcrackme.so:80505D9E loc_80505D9E                            ; CODE XREF: libcrackme.so:80505D96j
libcrackme.so:80505D9E LDR             R1, [SP,#0x10]
libcrackme.so:80505DA0 LDR             R2, [SP,#8]
libcrackme.so:80505DA2 LDR             R3, [R1,#0x34]
libcrackme.so:80505DA4 LDRB            R3, [R3,R2]             ; 取帐户下一个字节
libcrackme.so:80505DA6 STR             R3, [SP,#4]
libcrackme.so:80505DA8
libcrackme.so:80505DA8 loc_80505DA8                            ; CODE XREF: libcrackme.so:80505D9Cj
libcrackme.so:80505DA8 MOVS            R3, #0
libcrackme.so:80505DAA STR             R3, [SP,#0xC]
libcrackme.so:80505DAC LDR             R3, =(unk_80516AF8 - 0x80505DB4)
libcrackme.so:80505DAE LDR             R1, =unk_104B2
libcrackme.so:80505DB0 ADD             R3, PC ; unk_80516AF8
libcrackme.so:80505DB2 ADDS            R3, #0x30
libcrackme.so:80505DB4 STR             R3, [SP,#0x1C]
libcrackme.so:80505DB6 STR             R1, [SP,#0x20]
libcrackme.so:80505DB8
libcrackme.so:80505DB8 loc_80505DB8                            ; CODE XREF: libcrackme.so:80505DE8j
libcrackme.so:80505DB8 LDR             R0, [SP,#0x1C]
libcrackme.so:80505DBA BLX             setjmp_0
libcrackme.so:80505DBE CMP             R0, #0
libcrackme.so:80505DC0 BEQ             loc_80505DC8
libcrackme.so:80505DC2 BLX             sub_80507D64
libcrackme.so:80505DC6 B               loc_80505DDC
libcrackme.so:80505DC8 ; ---------------------------------------------------------------------------
libcrackme.so:80505DC8
libcrackme.so:80505DC8 loc_80505DC8                            ; CODE XREF: libcrackme.so:80505DC0j
libcrackme.so:80505DC8 LDR             R3, [SP,#0x20]
libcrackme.so:80505DCA LDR             R2, [SP,#0xC]
libcrackme.so:80505DCC LDR             R1, [SP,#4]
libcrackme.so:80505DCE ADD             R3, PC
libcrackme.so:80505DD0 ADDS            R3, #0x38
libcrackme.so:80505DD2 LDRB            R3, [R2,R3]             ; 取表中1字节
libcrackme.so:80505DD4 EORS            R3, R1                  ; 帐户1字节与表中1字节进行计算
libcrackme.so:80505DD6 LSLS            R3, R3, #0x18
libcrackme.so:80505DD8 LSRS            R3, R3, #0x18
libcrackme.so:80505DDA STR             R3, [SP,#4]
libcrackme.so:80505DDC
libcrackme.so:80505DDC loc_80505DDC                            ; CODE XREF: libcrackme.so:80505DC6j
libcrackme.so:80505DDC LDR             R2, [SP,#0xC]
libcrackme.so:80505DDE MOVS            R3, #0x100
libcrackme.so:80505DE2 ADDS            R2, #1
libcrackme.so:80505DE4 STR             R2, [SP,#0xC]
libcrackme.so:80505DE6 CMP             R2, R3                  ; 循环0x100次
libcrackme.so:80505DE8 BNE             loc_80505DB8
libcrackme.so:80505DEA LDR             R3, [SP,#4]
libcrackme.so:80505DEC LDR             R0, [SP,#0x24]
libcrackme.so:80505DEE STR             R3, [SP,#0x14]
libcrackme.so:80505DF0 BLX             setjmp_0
libcrackme.so:80505DF4 CMP             R0, #0
libcrackme.so:80505DF6 BEQ             loc_80505DFE
libcrackme.so:80505DF8 BLX             sub_80507D64
libcrackme.so:80505DFC B               loc_80505E1E
libcrackme.so:80505DFE ; ---------------------------------------------------------------------------
libcrackme.so:80505DFE
libcrackme.so:80505DFE loc_80505DFE                            ; CODE XREF: libcrackme.so:80505DF6j
libcrackme.so:80505DFE LDR             R1, [SP,#0x14]
libcrackme.so:80505E00 CMP             R1, #0
libcrackme.so:80505E02 BNE             loc_80505E1E
libcrackme.so:80505E04 LDR             R0, =(unk_80516AF8 - 0x80505E0A)
libcrackme.so:80505E06 ADD             R0, PC ; unk_80516AF8
libcrackme.so:80505E08 ADDS            R0, #0x30
libcrackme.so:80505E0A BLX             setjmp_0
libcrackme.so:80505E0E MOVS            R2, #0x99
libcrackme.so:80505E10 STR             R2, [SP,#4]
libcrackme.so:80505E12 CMP             R0, #0
libcrackme.so:80505E14 BEQ             loc_80505E1E
libcrackme.so:80505E16 BLX             sub_80507D64
libcrackme.so:80505E1A LDR             R3, [SP,#0x14]
libcrackme.so:80505E1C STR             R3, [SP,#4]
libcrackme.so:80505E1E
libcrackme.so:80505E1E loc_80505E1E                            ; CODE XREF: libcrackme.so:80505DFCj
libcrackme.so:80505E1E                                         ; libcrackme.so:80505E02j ...
libcrackme.so:80505E1E LDR             R2, [SP,#8]
libcrackme.so:80505E20 LDR             R1, [SP,#0x10]
libcrackme.so:80505E22 ADDS            R3, R1, R2
libcrackme.so:80505E24 LDR             R2, [SP,#8]
libcrackme.so:80505E26 MOV             R1, SP
libcrackme.so:80505E28 LDRB            R1, [R1,#4]
libcrackme.so:80505E2A ADDS            R3, #0x5A
libcrackme.so:80505E2C ADDS            R2, #1
libcrackme.so:80505E2E STRB            R1, [R3]                ; 存放计算后得到的值
libcrackme.so:80505E30 STR             R2, [SP,#8]
libcrackme.so:80505E32 CMP             R2, #8                  ; 循环8次,其中又循环0x100次
libcrackme.so:80505E34 BNE             loc_80505D8E            ; 开始
libcrackme.so:80505E36
libcrackme.so:80505E36 loc_80505E36                            ; CODE XREF: libcrackme.so:80505D82j
libcrackme.so:80505E36 ADD             SP, SP, #0x2C
libcrackme.so:80505E38 MOVS            R0, #1
libcrackme.so:80505E3A POP             {PC}

//--------用上面帐户计算得到的8字节数值进行再次计算
libcrackme.so:80505594 loc_80505594                            ; CODE XREF: sub_80505588+3Aj
libcrackme.so:80505594 ASRS            R3, R4, #0x1F
libcrackme.so:80505596 LSRS            R3, R3, #0x1D
libcrackme.so:80505598 ADDS            R3, R3, R4
libcrackme.so:8050559A ASRS            R3, R3, #3
libcrackme.so:8050559C LDRB            R3, [R1,R3]             ; 取帐户与表计算后的值
libcrackme.so:8050559E MOV             R12, R3
libcrackme.so:805055A0 MOVS            R3, R4
libcrackme.so:805055A2 ANDS            R3, R7
libcrackme.so:805055A4 STR             R3, [SP,#0x20+var_1C]
libcrackme.so:805055A6 BPL             loc_805055B0            ; 计算表与帐户计算后的值
libcrackme.so:805055A8 SUBS            R3, #1
libcrackme.so:805055AA ORRS            R3, R6
libcrackme.so:805055AC ADDS            R3, #1
libcrackme.so:805055AE STR             R3, [SP,#0x20+var_1C]
libcrackme.so:805055B0
libcrackme.so:805055B0 loc_805055B0                            ; CODE XREF: sub_80505588+1Ej
libcrackme.so:805055B0 LDR             R3, [SP,#0x20+var_1C]   ; 计算表与帐户计算后的值
libcrackme.so:805055B2 MOV             R5, R12                 ; 进算运算
libcrackme.so:805055B4 ASRS            R5, R3
libcrackme.so:805055B6 MOVS            R3, R5
libcrackme.so:805055B8 MOVS            R5, #1
libcrackme.so:805055BA ANDS            R3, R5
libcrackme.so:805055BC STRB            R3, [R0,R4]             ; 存放运算后的值
libcrackme.so:805055BE ADDS            R4, R4, R5
libcrackme.so:805055C0
libcrackme.so:805055C0 loc_805055C0                            ; CODE XREF: sub_80505588+Aj
libcrackme.so:805055C0 CMP             R4, R2                  ; 判断是否完成 循环0x40次
libcrackme.so:805055C2 BLT             loc_80505594
libcrackme.so:805055C4 POP             {R0-R2,R4-R7,PC}

//----------循环初始化成01
libcrackme.so:80505804 loc_80505804                            ; CODE XREF: libcrackme.so:8050583Cj
libcrackme.so:80505804 LDR             R4, =(unk_805165F8 - 0x8050580E)
libcrackme.so:80505806 LDRB            R5, [R6,R7]
libcrackme.so:80505808 MOVS            R1, #0x1C
libcrackme.so:8050580A ADD             R4, PC ; unk_805165F8
libcrackme.so:8050580C MOVS            R3, R4
libcrackme.so:8050580E ADDS            R3, #0x30
libcrackme.so:80505810 MOVS            R0, R3
libcrackme.so:80505812 MOVS            R2, R5
libcrackme.so:80505814 STR             R3, [SP]
libcrackme.so:80505816 BL              loc_805056FC
libcrackme.so:8050581A MOVS            R0, R4
libcrackme.so:8050581C ADDS            R0, #0x4C
libcrackme.so:8050581E MOVS            R1, #0x1C
libcrackme.so:80505820 MOVS            R2, R5
libcrackme.so:80505822 BL              loc_805056FC
libcrackme.so:80505826 MOVS            R3, #0x30
libcrackme.so:80505828 MOVS            R2, R3
libcrackme.so:8050582A MULS            R2, R6
libcrackme.so:8050582C ADDS            R4, #0x70
libcrackme.so:8050582E ADDS            R0, R4, R2
libcrackme.so:80505830 LDR             R1, [SP]
libcrackme.so:80505832 LDR             R2, [SP,#4]
libcrackme.so:80505834 ADDS            R6, #1
libcrackme.so:80505836 BL              sub_805056CC
libcrackme.so:8050583A CMP             R6, #0x10               ; 循环0x10次
libcrackme.so:8050583C BNE             loc_80505804
libcrackme.so:8050583E POP             {R0-R2,R4-R7,PC}
libcrackme.so:8050583E ; ----------------------------------

/---------计算密码值得到 8字节数值
libcrackme.so:805060FC BL              loc_805058F8            ; 密码数值进行计算得到8字节数值

libcrackme.so:80506598 BL              loc_80505F70            ; 密码计算出来的8值与帐户进行比较
libcrackme.so:80505F70 loc_80505F70                            ; CODE XREF: libcrackme.so:80506598p
libcrackme.so:80505F70 PUSH            {R4,LR}
libcrackme.so:80505F72 SUB             SP, SP, #0x18
libcrackme.so:80505F74 STR             R0, [SP,#0xC]
libcrackme.so:80505F76 LDR             R0, =(unk_80515F4C - 0x80505F7E)
libcrackme.so:80505F78 LDR             R1, [SP,#0xC]
libcrackme.so:80505F7A ADD             R0, PC ; unk_80515F4C
libcrackme.so:80505F7C STR             R0, [SP,#8]
libcrackme.so:80505F7E LDR             R0, [R1,#0x34]
libcrackme.so:80505F80 BLX             strlen_0                ; 帐户长度
libcrackme.so:80505F84 STR             R0, [SP,#0x10]
libcrackme.so:80505F86 LDR             R0, [SP,#0xC]
libcrackme.so:80505F88 ADDS            R0, #0x3C
libcrackme.so:80505F8A BLX             strlen_0                ; 密码计算出来的长度
libcrackme.so:80505F8E LDR             R2, [SP,#0x10]
libcrackme.so:80505F90 CMP             R2, R0                  ; 判断计算出来的值长度与帐户长度
libcrackme.so:80505F92 BEQ             loc_80505FA2

//密码计算出来的值与帐户进行比较  (相同则显示成功)
libcrackme.so:80505FCE loc_80505FCE                            ; CODE XREF: libcrackme.so:80505FC6j
libcrackme.so:80505FCE LDR             R0, [SP,#0xC]
libcrackme.so:80505FD0 LDR             R1, [SP,#4]
libcrackme.so:80505FD2 LDR             R2, [R0,#0x34]
libcrackme.so:80505FD4 ADDS            R3, R0, R1
libcrackme.so:80505FD6 ADDS            R3, #0x3C
libcrackme.so:80505FD8 LDRB            R2, [R2,R1]             ; 取帐户值
libcrackme.so:80505FDA LDRB            R3, [R3]                ; 取密码计算出来的值
libcrackme.so:80505FDC CMP             R2, R3                  ; 比较密码计算后的值与帐户是否相同 (相同则显示成功)
libcrackme.so:80505FDE BEQ             loc_80505FF6
libcrackme.so:80505FE0 MOVS            R0, #1


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (3)
雪    币: 7115
活跃值: (639)
能力值: (RANK:1290 )
在线值:
发帖
回帖
粉丝
2
很抱歉,没有注册机
2014-11-6 11:37
0
雪    币: 6
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习ing
谢谢
2014-12-15 10:26
0
雪    币: 1
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢楼主
2017-5-13 17:16
0
游客
登录 | 注册 方可回帖
返回
//