201314 发表于 2009-7-31 13:11:25

冰大,黑名单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}

loquat 发表于 2009-7-31 14:36:36

想搞出源代码,想办法把那个列表txt整合进E71。
然后就彻底丢弃S75了。。。

binghelingxi 发表于 2009-7-31 20:28:58

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位指令的限制吧

201314 发表于 2009-8-1 00:28: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

201314 发表于 2009-8-1 11:38:42

上面我已经检查不出错在哪里了啊。
想要源代码,给MP里面加一个whitelist.txt项。。。

binghelingxi 发表于 2009-8-1 19:57:37

得不到vkp,只能得到elf
用elf2vkp啊

loquat 发表于 2009-8-1 21:50:49

就是提示elf2vkp出错不能得到vkp
但是我记得各个地方都关联对了,bat的地址没写错,bin文件名没错。

binghelingxi 发表于 2009-8-1 23:25:19

把elf发上来吧,

loquat 发表于 2009-8-3 01:15:09

把elf发上来吧,
binghelingxi 发表于 2009-8-1 23:25 http://www.0110.cn/images/common/back.gif
发来了,看里面的代码串,和vkp补丁有较大差距。。。

loquat 发表于 2009-8-3 01:23:05

这么大个补丁,我好难搞啊。
还是希望冰大出手。把Non addressbook添加进来。
我把那个自定义列表添加进来,还不如你armdebugger一下来得快。
不知道NSG上什么时候能有此补丁。汗,进步比较慢。。。

binghelingxi 发表于 2009-8-3 19:25:37

这个ELF我看了,怎么没有HOOK部分

loquat 发表于 2009-8-3 21:17:46

我没管hook部分啊,想先把主程序部分弄出来。。。

loquat 发表于 2009-8-14 22:38:47

疑问:
中间这几个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

loquat 发表于 2009-8-14 23:10:29

这是我最后得到的东西。。。#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

loquat 发表于 2009-8-15 12:19:38

等待冰大指点把此补丁完善。。。

binghelingxi 发表于 2009-8-15 19:33:36

SUB   R5, #2
改为SUB   R5, R5, #2

binghelingxi 发表于 2009-8-15 19:42:57

FUN6:
                 BX      PC
                     CODE32

改为

FUN6:
                     CODE32
                 BX      PC

loquat 发表于 2009-8-15 19:53:33

最后一个error还在啊。。。
Error: Illegal register, 'PC' is not allowed here E:\black3.2\main.asm 114

binghelingxi 发表于 2009-8-15 20:24:25

我刚刚那样是错的
FUN6:
               BX      PC
                     CODE32


在BODY1:上面加CODE16

loquat 发表于 2009-8-15 21:11:37

编译能得到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
查看完整版本: 冰大,黑名单v3.2反汇编后成了这么个程序!!!