冰大,黑名单v3.2反汇编后成了这么个程序!!!
下一步不知道该怎么改才能移植到S7Cv47上。有几个地方不懂。。。源码大部分地方都看不懂,B来BL去的,看不太懂。。。
先弄成能正确编译出来的源码而不能。
又费了一中午时间。。。
#define AutoAnswer 0xA09DE7AB
ADD R2, R6, #0 //这个和MOV R2, R6有区别吗?
ADD R0, R5, #0 //一开始就来这两句,都不知道是什么意思。
PUSH {R0-R7,LR}
BL FUNC3
BEQ FUNC2 //这两个跳转到底是怎么跳的?BL到FUNC3之后能返回值吗?BEQ的条件到底是什么?
CMP R5, #0
BEQ FUNC1
CMP R5, #0xB //R5是装什么东西的?群组?
BGT FUNC2
CMP R5, #3
BLS FUNC2
SUB R5, #2
FUNC1:
BL FUNC4
BEQ FUNC5
FUNC2:
POP {R0-R7,PC}
FUNC5:
POP {R0-R7}
B FUNC6
NOP
ADD R2, R6, #0
ADD R0, R5, #0
PUSH {R0-R7,LR}
BL FUNC3
BEQ FUNC8
CMP R5, #0
BEQ FUNC7
CMP R5, #0xB
BGT FUNC8
CMP R5, #3
BLS FUNC8
SUB R5, #2
B FUNC9
FUNC7:
MOV R0, #1
SWI 0x7D //7D: IsIncognitoCall
CMP R0, #0
BNE FUNC9
MOV R5, #0xA
FUNC9:
BL FUNC4
BEQ FUNC10
FUNC8:
POP {R0-R7,PC}
FUNC10:
POP {R0-R7}
B FUNC6
FUNC4:
PUSH {R1-R7,LR}
ADD R4, R5, #2
LDRB R1,
CMP R1, #0
BEQ FUNC11
MOV R0, #0
B FUNC12
FUNC11:
SWI 0xB6 // B6: GetProfile()
FUNC12:
MOV R1, #0xB
MUL R0, R1
ADD R0, R0, R6
MOV R5, #0xFF
LDRB R2,
LSL R2, R2, #1
ADD PC, R2
NOP
B RP2
B EndCall
B EndCallBusy
B RP1
B AutoAnswer
EndCallBusy:
MOV R0, #0
MOV R1, #0
SWI 0x66 // 66: EndCallBusy
B RP1
EndCall:
SWI 0x65 //65: EndCall
B RP1
AutoAnswer:
LDR R5, =AutoAnswer
BLX R5
RP1:
MOV R5, #0
RP2:
ADD R0, R5, #0
POP {R1-R7,PC}
NOP
FUNC6:
BX PC
DCB 0
DCB 0 //直接反汇编出来的有着两句,不知道要不要。。。
CODE32
LDMFD SP!, {LR} //这个就完全没见过,看不懂什么意思了。。
ADD LR, LR, #4
BX LR
FUNC3:
CODE16
PUSH {R0-R5,R7,LR}
MOVL R0, 0xCD00 //
ADD R0, #9 //这两句反汇编出来的东西很奇怪,怎么不直接MOV RO,0xCD09?
SWI 0xC4 //C4: GetBuffer
BEQ PF1
ADD R6, R0, #0
PF1:
POP {R0-R5,R7,PC} 想搞出源代码,想办法把那个列表txt整合进E71。
然后就彻底丢弃S75了。。。 ADD R2, R6, #0 和MOVR2, R6是一样的
FUNC3 里面改变了CPSR的值(准确的说是在GetBuffer函数里面),返回时并没有被改变,可以直接BEQ
R5里面确实是群组信息
DCB 0
DCB 0
只是为了下面ARM模式的代码4字节对齐
LDMFD SP!, {LR}, 看LDM指令吧,
MOV RO,0xCD09,是不能完成的操作,应该是受32位指令的限制吧 ADD R2, R6, #0 和MOV R2, R6是一样的
FUNC3 里面改变了CPSR的值(准确的说是在GetBuffer函数里面),返回时并没有被改变,可以直接BEQ
R5里面确实是群组信息
DCB 0
DCB 0
只是为了下面ARM模式 ...
binghelingxi 发表于 2009-7-31 20:28 http://www.0110.cn/images/common/back.gif
修改了几个小地方然后编译。。。
得不到vkp,只能得到elf
并且elf中的对应字串和原始vkp也有部分区别。奇怪了。。。
明明是按反汇的代码来修改的,竟然会出错了。。。#define AutoAnswer 0xA09DE7AB
#define PATCH_ID 0xCD09
RSEG BODY
CODE16
BODY:
ADD R2, R6, #0 //这个和MOV R2, R6有区别吗?
ADD R0, R5, #0 //一开始就来这两句,都不知道是什么意思。
PUSH {R0-R7,LR}
BL FUNC3
BEQ FUNC2
CMP R5, #0
BEQ FUNC1
CMP R5, #0xB
BGT FUNC2
CMP R5, #3
BLS FUNC2
SUB R5, #2
FUNC1:
BL FUNC4
BEQ FUNC5
FUNC2:
POP {R0-R7,PC}
FUNC5:
POP {R0-R7}
B FUNC6
NOP
ADD R2, R6, #0
ADD R0, R5, #0
PUSH {R0-R7,LR}
BL FUNC3
BEQ FUNC8
CMP R5, #0
BEQ FUNC7
CMP R5, #0xB
BGT FUNC8
CMP R5, #3
BLS FUNC8
SUB R5, #2
B FUNC9
FUNC7:
MOV R0, #1
SWI 0x7D //7D: IsIncognitoCall
CMP R0, #0
BNE FUNC9
MOV R5, #0xA
FUNC9:
BL FUNC4
BEQ FUNC10
FUNC8:
POP {R0-R7,PC}
FUNC10:
POP {R0-R7}
B FUNC6
FUNC4:
PUSH {R1-R7,LR}
ADD R4, R5, #2
LDRB R1,
CMP R1, #0
BEQ FUNC11
MOV R0, #0
B FUNC12
FUNC11:
SWI 0xB6 // B6: GetProfile()
FUNC12:
MOV R1, #0xB
MUL R0, R1
ADD R0, R0, R6
MOV R5, #0xFF
LDRB R2,
LSL R2, R2, #1
ADD PC, R2
NOP
B RP2
B EndCall
B EndCallBusy
B RP1
B Answer
EndCallBusy:
MOV R0, #0
MOV R1, #0
SWI 0x66 // 66: EndCallBusy
B RP1
EndCall:
SWI 0x65 //65: EndCall
B RP1
Answer:
LDR R5, =AutoAnswer
BLX R5
RP1:
MOV R5, #0
RP2:
ADD R0, R5, #0
POP {R1-R7,PC}
NOP
FUNC6:
BX PC
CODE32
LDMFD SP!, {LR} //这个就完全没见过,看不懂什么意思了。。
ADD LR, LR, #4
BX LR
FUNC3:
CODE16
PUSH {R0-R5,R7,LR}
LDR R0, =PATCH_ID
SWI 0xC4 //C4: GetBuffer
BEQ PF1
MOV R6, R0
PF1:
POP {R0-R5,R7,PC}
END 上面我已经检查不出错在哪里了啊。
想要源代码,给MP里面加一个whitelist.txt项。。。 得不到vkp,只能得到elf
用elf2vkp啊 就是提示elf2vkp出错不能得到vkp
但是我记得各个地方都关联对了,bat的地址没写错,bin文件名没错。 把elf发上来吧, 把elf发上来吧,
binghelingxi 发表于 2009-8-1 23:25 http://www.0110.cn/images/common/back.gif
发来了,看里面的代码串,和vkp补丁有较大差距。。。 这么大个补丁,我好难搞啊。
还是希望冰大出手。把Non addressbook添加进来。
我把那个自定义列表添加进来,还不如你armdebugger一下来得快。
不知道NSG上什么时候能有此补丁。汗,进步比较慢。。。 这个ELF我看了,怎么没有HOOK部分 我没管hook部分啊,想先把主程序部分弄出来。。。 疑问:
中间这几个ROM:A0066738 C0 46 NOP
ROM:A006673A 0C E0 B loc_A0066756
ROM:A006673A
ROM:A006673C 06 E0 B loc_A006674C
ROM:A006673C
ROM:A006673E 01 E0 B loc_A0066744
ROM:A006673E
ROM:A0066740 08 E0 B loc_A0066754
ROM:A0066740
ROM:A0066742 05 E0 B loc_A0066750直接处理成这样的标签不知道行不行,这样子连续的B来B去我不懂什么意思了。ROM:A0066738 C0 46 NOP
ROM:A006673A 0C E0 B FUND
ROM:A006673A
ROM:A006673C 06 E0 B FUNE
ROM:A006673C
ROM:A006673E 01 E0 B FUNF
ROM:A006673E
ROM:A0066740 08 E0 B FUN0
ROM:A0066740
ROM:A0066742 05 E0 B FUNG 这是我最后得到的东西。。。#define adr_AutoAnswer 0xA09DE7AB
#define PATCH_ID 0xCD09
RSEG HOOK1
CODE16
LDR R4, =HOOKA
BLX R4
RSEG HOOK2
CODE16
LDR R4, =HOOKB
BLX R4
HOOKA:
CODE32
LDR R12, =BODY1
BX R12
HOOKB:
CODE32
LDR R12, =BODY2
BX R12
BODY1:
MOV R2, R6
MOV R0, R5
PUSH {R0-R7,LR}
BL FUN1
BEQ FUN2
CMP R5, #0
BEQ FUN3
CMP R5, #0xB
BGT FUN2
CMP R5, #3
BLS FUN2
SUB R5, #2
FUN3:
BL FUN4
BEQ FUN5
FUN2:
POP {R0-R7,PC}
FUN5:
POP {R0-R7}
B FUN6
NOP
BODY2:
MOV R2, R6
MOV R0, R5
PUSH {R0-R7,LR}
BL FUN1
BEQ FUN7
CMP R5, #0
BEQ FUN8
CMP R5, #0xB
BGT FUN7
CMP R5, #3
BLS FUN7
SUB R5, #2
B FUN9
FUN8:
MOV R0, #1
SWI 0x7D //7D: IsIncognitoCall
CMP R0, #0
BNE FUN9
MOV R5, #0xA
FUN9:
BL FUN4
BEQ FUNA
FUN7:
POP {R0-R7,PC}
FUNA:
POP {R0-R7}
B FUN6
FUN4:
PUSH {R1-R7,LR}
ADD R4, R5, #2
LDRB R1,
CMP R1, #0
BEQ FUNB
MOV R0, #0
B FUNC
FUNB:
SWI 0xB6 // B6: GetProfile()
FUNC:
MOV R1, #0xB
MUL R0, R1
ADD R0, R0, R6
MOV R5, #0xFF
LDRB R2,
LSL R2, R2, #1
ADD PC, R2
NOP
B FUND
B FUNE
B FUNF
B FUN0
B FUNG
FUNF:
MOV R0, #0
MOV R1, #0
SWI 0x66 // 66: EndCallBusy
B FUN0
FUNE:
SWI 0x65 //65: EndCall
B FUN0
FUNG:
LDR R5, =adr_AutoAnswer
BLX R5
FUN0:
MOV R5, #0
FUND:
MOV R0, R5
POP {R1-R7,PC}
NOP
FUN6:
BX PC
CODE32
LDMFD SP!, {LR}
ADD LR, LR, #4
BX LR
FUN1:
CODE16 PUSH {R0-R5,R7,LR}
LDR R0, =PATCH_ID
SWI 0xC4 //C4: GetBuffer
BEQ FUNH
MOV R6, R0
FUNH:
POP {R0-R5,R7,PC}
END
提示好多错误。。。
Error: Operand syntax error
SUB R5, #2
MUL R0, R1
ADD PC, R2Error: Illegal register, 'PC' is not allowed here
BX PC
等待冰大指点把此补丁完善。。。 SUB R5, #2
改为SUB R5, R5, #2 FUN6:
BX PC
CODE32
改为
FUN6:
CODE32
BX PC 最后一个error还在啊。。。
Error: Illegal register, 'PC' is not allowed here E:\black3.2\main.asm 114 我刚刚那样是错的
FUN6:
BX PC
CODE32
在BODY1:上面加CODE16 编译能得到elf,但是仍然没有hook部分。。。
最终的源码#define adr_AutoAnswer 0xA09DE7AB
#define PATCH_ID 0xCD09
RSEG HOOK1
CODE16
LDR R4, =HOOKA
BLX R4
RSEG HOOK2
CODE16
LDR R4, =HOOKB
BLX R4
HOOKA:
CODE32
LDR R12, =BODY1
BX R12
HOOKB:
CODE32
LDR R12, =BODY2
BX R12
CODE16
BODY1:
MOV R2, R6
MOV R0, R5
PUSH {R0-R7,LR}
BL FUN1
BEQ FUN2
CMP R5, #0
BEQ FUN3
CMP R5, #0xB
BGT FUN2
CMP R5, #3
BLS FUN2
SUB R5, R5, #2
FUN3:
BL FUN4
BEQ FUN5
FUN2:
POP {R0-R7,PC}
FUN5:
POP {R0-R7}
B FUN6
NOP
BODY2:
MOV R2, R6
MOV R0, R5
PUSH {R0-R7,LR}
BL FUN1
BEQ FUN7
CMP R5, #0
BEQ FUN8
CMP R5, #0xB
BGT FUN7
CMP R5, #3
BLS FUN7
SUB R5, R5, #2
B FUN9
FUN8:
MOV R0, #1
SWI 0x7D //7D: IsIncognitoCall
CMP R0, #0
BNE FUN9
MOV R5, #0xA
FUN9:
BL FUN4
BEQ FUNA
FUN7:
POP {R0-R7,PC}
FUNA:
POP {R0-R7}
B FUN6
FUN4:
PUSH {R1-R7,LR}
ADD R4, R5, #2
LDRB R1,
CMP R1, #0
BEQ FUNB
MOV R0, #0
B FUNC
FUNB:
SWI 0xB6 // B6: GetProfile()
FUNC:
MOV R1, #0xB
MUL R0, R1
ADD R0, R0, R6
MOV R5, #0xFF
LDRB R2,
LSL R2, R2, #1
ADD PC, R2
NOP
B FUND
B FUNE
B FUNF
B FUN0
B FUNG
FUNF:
MOV R0, #0
MOV R1, #0
SWI 0x66 // 66: EndCallBusy
B FUN0
FUNE:
SWI 0x65 //65: EndCall
B FUN0
FUNG:
LDR R5, =adr_AutoAnswer
BLX R5
FUN0:
MOV R5, #0
FUND:
MOV R0, R5
POP {R1-R7,PC}
NOP
FUN6:
BX PC
CODE32
LDMFD SP!, {LR}
ADD LR, LR, #4
BX LR
FUN1:
CODE16 PUSH {R0-R5,R7,LR}
LDR R0, =PATCH_ID
SWI 0xC4 //C4: GetBuffer
BEQ FUNH
MOV R6, R0
FUNH:
POP {R0-R5,R7,PC}
END
E71Cv41.xcl-carm
-Z(CODE)BODY1=A00666C0-FFFFFFFF
-Z(CODE)HOOK1=A071DC00-FFFFFFFF
-Z(CODE)HOOK2=A071DC0A-FFFFFFFF
-Z(CODE)HOOKA=A082B44C-FFFFFFFF
-Z(CODE)HOOKB=A082B458-FFFFFFFF
提示elf2vkp.exe错误:“0x0eedfade,位置0x7c812a6b”
页:
[1]
2