爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 503|回复: 4
收起左侧

[公告] 我觉得黑白名单应该可以作为一个大的补丁开发的啊

[复制链接]
发表于 2009-3-31 14:26:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册会员 微信登录

x
黑白名单,其实可以和区号秀补丁一样强大的啊。
不知道为什么没有大大用唉。

目前的黑名单已经能从txt读取blacklist


有人说那个补丁有bug,短信没有声音了。还有一个显示“未成功”的跳窗。
对于用Mss的人来说,这根本就不是问题。
反正你BK掉了,那个跳窗也就没有了。或者你不BK,刷那个取消来信息窗口的补丁一样也没那跳窗
至于短信铃声没了的,这个应该算是一个比较不好的bug了。
在我的死缠烂磨下袋鼠仔细看了这个补丁的源程序。


那个补丁群组功能无法实现,袋鼠如是说

BODY:
    PUSH    {R0-R7,LR}
    BLX     do_check
    CMP     R0, #1 //把这句改成CMP R0,#0,应该就可以变白名单了

还有我觉得这句if(group==(*p)-0x28),减去0x28不大对
如果(*p)等于'1'也就是0x31,减去0x28就等于3。。
如果group是从0开始算的,就应该减去0x31,如果从1开始算的就该减去0x30
你可以测试一下



这个补丁理想的前途是(只是我觉得):从文件读取blacklist和whitelist,黑白名单由MP选择开关控制。有群组和情景模式控制,这两个能够交叉控制,并且区分优先级。用过65黑名单MP3.2的都晓得那个是多么好用啊。

你想:
1、如果你的手机能实现白名单,手机里和whitelist里没有的号码通通拒绝,多舒服。
2、你在静音模式下拒绝某些群组的号码。多刺激
3、你不想接听任何电话的时候,直接所有都拒绝掉。自己又能打电话出去。多爽快。

这个补丁照我这么想的话,估计难度很大很大。
不过要是这个补丁简单点做的话,应该有人能做出来。
比如搞定黑白名单共存MP控制,黑名单的群组+情景模式控制。这就足够了。
唉,不知道为什么高手们都不用黑名单。

冰说补丁有bug,开发到一半不愿意再做了。
袋鼠也说不用黑名单

不知道袋鼠是不是有时间在看这个补丁。

想这个补丁啊,当前补丁的源码再次贴出来吧。
兄弟们顶起,说不定那个高手看到了一下子就来了兴趣了呢!!!
 楼主| 发表于 2009-3-31 14:28:23 | 显示全部楼层
  1. #include "..\inc\swilib.h"

  2. //#pragma swi_number=0x0248
  3. //__swi void GetCalleeNumber(int index, WSHDR *ws);

  4. extern void GetCalleeNumber(int index, WSHDR *ws);

  5. int do_check(int group)
  6. {
  7.         char path[]="0:\\Misc\\BlackList.txt";
  8.         unsigned int err;
  9.         int f=fopen(path, A_ReadOnly, P_READ, &err);
  10.         if(f<0)
  11.                 return 0;//0,不在黑名单或者名单不存在
  12.         char *buf=malloc(4096);
  13.         int size=fread(f, buf, 4096, &err);
  14.         fclose(f, &err);
  15.         char *p;
  16.         p=strstr(buf, "[Profile]:");
  17.         if(p)
  18.         {
  19.                 p+=10;
  20.                 if((*p)>='1'&&(*p)<='8')
  21.                 {
  22.                         if((*p-'1')!=GetProfile())
  23.                                 return 0;
  24.                 }
  25.                 //int pf=GetProfile();
  26.         }
  27.         p=strstr(buf, "[Group]:");
  28.         if(p)
  29.         {
  30.                 p+=8;
  31.                 if((*p)>='1'&&(*p)<='9')
  32.                 {
  33.                         if(group==(*p)-0x28)
  34.                                 return 1;
  35.                 }
  36.         }
  37.         if(size>=0)
  38.                 buf[size]=0;
  39.         char num[32];
  40.         WSHDR *ws=AllocWS(32);
  41.         GetCalleeNumber(IsCalling(), ws);
  42.         ws_2str(ws, num, 32);
  43.         char *s=num;
  44.         if(strncmp(num, "+86", 3)==0)
  45.                 s+=3;
  46.         //char *
  47.         p=strstr(buf, s);
  48.         int rec;
  49.         s=p-1;
  50.         if(p)
  51.         {
  52.                 if(s)
  53.                 {
  54.                         if((*s)>='0'&&(*s)<='9')
  55.                                 rec=0;
  56.                         else
  57.                                 rec=1;
  58.                 }
  59.                 else
  60.                         rec=1;//拒接
  61.         }
  62.         else
  63.                 rec=0;
  64.         mfree(buf);
  65.         FreeWS(ws);
  66.         return rec;
  67. }
复制代码
  1. #ifdef E71Cv41
  2. #define ADDR_GetCalleeNumber 0xA094D15E+1
  3. #define ADR_PlaySound2  0xA05ABEA4
  4. #endif

  5.     CODE16
  6.     EXTERN do_check
  7.     RSEG BLACK_LIST_BODY
  8.     PUBLIC GetCalleeNumber
  9.    
  10. GetCalleeNumber:
  11.     PUSH    {R7,LR}
  12.     LDR     R7, =ADDR_GetCalleeNumber
  13.     BLX     R7
  14.     POP     {R7,PC}
  15.    
  16. BODY:
  17.     PUSH    {R0-R7,LR}
  18.     BLX     do_check
  19.     CMP     R0, #1
  20.     BNE     RP
  21.     MOV     R0, #0
  22.     SWI     0x66  //EndCallBusy
  23.     B       EXIT
  24. RP:
  25.     POP     {R0-R7}
  26.     LDR     R7,=ADR_PlaySound2
  27.     BLX     R7
  28.     //SWI     0x33 //PlaySound2
  29.     POP     {PC}
  30. EXIT:
  31.     POP     {R0-R7,PC}
  32.     /*
  33. NONAME:
  34.     PUSH    {R0-R7,LR}
  35.     MOV     R0, #1
  36.     BL      get_it
  37.     CMP     R0, #0
  38.     BEQ     EXITNOME
  39.     MOV     R0, #0
  40.     //LDR     R3, =ADR_EndCallBusy
  41.     //BLX     R3
  42.     SWI     0x66  //EndCallBusy
  43. EXITNOME:
  44.     POP     {R0-R7,PC}*/
  45.    
  46.     CODE32
  47.     RSEG BLACKLIST_DUMP
  48. BLACK_LIST_DUMP:
  49.     LDR     R12, =BODY
  50.     BX      R12
  51.    
  52.     CODE16
  53.     RSEG RHOOKBLACKLIST:CODE(1)
  54.     BLX     BLACK_LIST_DUMP
  55.    
  56.     END
复制代码
  1. -carm
  2. -Z(CODE)BLACK_LIST_BODY,CODE,DATA_C,ICODE,INITTAB,INTVEC,IRQ_STACK,CSTACK=A1359A00-FFFFFFFF
  3. -Z(CODE)BLACKLIST_DUMP=A08511F4-FFFFFFFF
  4. -Z(CODE)RHOOKBLACKLIST=A071DC0E-FFFFFFFF
  5. //-Z(CODE)NONAMEHOOK=A09DBC14-FFFFFFFF
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-31 14:29:34 | 显示全部楼层
袋鼠已经建好的工程也在这里:


源码int do_check(int group)需改为__arm int do_check(int group)否则编译不过~
群组无效可能是这句if(group==(*p)-0x28)有问题,我也不知道怎么算

IAR工程文件(套用了区号秀的,所以名字是CodeShow,呵呵,不影响使用)




                               
登录/注册后可看大图
BlackList IAR.rar (45.79 KB)
回复 支持 反对

使用道具 举报

发表于 2009-3-31 14:49:35 | 显示全部楼层
呵呵,不会只能帮顶了,有时候还是要用到的
回复 支持 反对

使用道具 举报

发表于 2009-3-31 23:28:12 | 显示全部楼层
希望代鼠有时间开发阿,顶起
回复 支持 反对

使用道具 举报

发表于 2009-4-1 08:10:29 | 显示全部楼层
看不懂的路过帮顶哈。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员 微信登录

本版积分规则

小黑屋|Archiver|手机版|爱技术 ( 沪ICP备08115260号-3 )

GMT+8, 2025-6-13 18:16

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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