- 积分
- 322
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
发表于 2008-5-24 16:37:58
|
显示全部楼层
原帖由 crack4000 于 2008-5-15 21:26 发表
最近看到电视购物的手机有些功能还是不错的.如魔音功能,短信防火墙,短信远程控制等.其中短信防火墙和短信远程控制用ELF应该能够实现,只是不知道哪些函数可以检测短信,并读取或者删除呢?
话说这个短信控制,似乎是可以实现滴。。。
这个是我写的解析pdu的代码。。。无比粗糙的说,从IncommingPDU()读取数据,不过只需要解析来短信那一部分。
http://sieelf.googlecode.com/svn ... astSMS/pdusms_sie.c- ...
- case 0x3: //未查看
- case 0x1:
- data->type=TYPE_IN;
- SMS_In(p, data);
- return 1;
- ...
复制代码 可以把特正字符串和对应的功能写道一个文件中,这样就灵活了。
这个,用mymenu2的源码可能会有很大帮助。
http://sieelf.googlecode.com/svn/SieELF/MyMenu2/MyMenu2/main.c
然后就是什么时刻检查有新的来短信,可以使用系统的MSG,来短信没有特定的MSG,只有在有网络数据传送的时候,才有MSG,不过这已经够了,在配合检查上一次读取数据的时间和这次读取的时间,就可以判断是否是新短信了。
我做了这个小玩意。。。
ELKA的这个MSG就是0x6134
SGOLD还需要慢慢测试,一开始可能会让你惊慌失措哈哈
简单的获得方法就是在手机上运行这个ELF,然后用simoco发送一条短信,就可以看到了- #include "../inc/swilib.h"
- typedef struct
- {
- CSM_RAM csm;
- }MAIN_CSM;
- extern void kill_data(void *p, void (*func_p)(void *));
- char ch_in[16];
- char ch_out[64];
- int n_in=0;
- int n_out=0;
- //6134 NETch
- //6105 WRITE EDIT SMS.DAT
- int maincsm_onmessage(CSM_RAM* data,GBS_MSG* msg)
- {
- if (
- (msg->msg!=MSG_HELPER_TRANSLATOR)
- &&(msg->msg!=MSG_IPC)
- &&(msg->msg!=MSG_CSM_DESTROYED)
- &&(msg->msg!=MSG_CSM_DESTROY_NOTIFY)
- &&(msg->msg!=MSG_GUI_DESTROYED)
- &&(msg->msg!=MSG_IDLETMR_EXPIRED)
- #ifdef NEWSGOLD
- &&(msg->msg!=0x6403)
- &&(msg->msg!=0x642C) //ALL BG ?
- &&(msg->msg!=0x6409)// POP GUI
- &&(msg->msg!=0x640A) //CSMCLOSE GUI?
- &&(msg->msg!=0x16178) //OPEN PLAYER
- &&(msg->msg!=0x8062) //LIVE PLAYER
- &&(msg->msg!=0x806E) //WARNING DEL FILE ?
- #endif
- )
- {
- n_out++;
- sprintf(ch_out, "msg%d: 0x%X", n_out, msg->msg);
- ShowMSG(1, (int)ch_out);
- }
- return(1);
- }
- static void maincsm_oncreate(CSM_RAM *data)
- {
- }
- static void Killer(void)
- {
- extern void *ELF_BEGIN;
- kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr());
- }
- static void maincsm_onclose(CSM_RAM *csm)
- {
- SUBPROC((void *)Killer);
- }
- const int minus11=-11;
- static unsigned short maincsm_name_body[140];
- static const struct
- {
- CSM_DESC maincsm;
- WSHDR maincsm_name;
- }MAINCSM =
- {
- {
- maincsm_onmessage,
- maincsm_oncreate,
- #ifdef NEWSGOLD
- 0,
- 0,
- 0,
- 0,
- #endif
- maincsm_onclose,
- sizeof(MAIN_CSM),
- 1,
- &minus11
- },
- {
- maincsm_name_body,
- NAMECSM_MAGIC1,
- NAMECSM_MAGIC2,
- 0x0,
- 139
- }
- };
- static void UpdateCSMname(void)
- {
- wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "MSG_TEST");
- }
- int main(void)
- {
- CSM_RAM *save_cmpc;
- char dummy[sizeof(MAIN_CSM)];
- UpdateCSMname();
-
- LockSched();
- save_cmpc=CSM_root()->csm_q->current_msg_processing_csm;
- CSM_root()->csm_q->current_msg_processing_csm=CSM_root()->csm_q->csm.first;
- CreateCSM(&MAINCSM.maincsm,dummy,0);
- CSM_root()->csm_q->current_msg_processing_csm=save_cmpc;
- UnlockSched();
- return 0;
- }
复制代码
[ 本帖最后由 BingK 于 2008-5-24 16:41 编辑 ] |
|