1、寫在前面java
1.爲何作免考?服務器
相較於考試,免考更能鍛鍊自身創新和探索能力,更有挑戰性。微信
2.選作微信推送防撤回緣由?session
2、寫在中間ide
1.什麼是防撤回?函數
2.實驗環境工具
3.撤回原理編碼
4.撤回代碼逆向分析spa
(1)將微信核心模塊放入IDA,搜索一下撤回有關的命令3d
(2)分析一哈,挺多的,但基本上邏輯順序與2、3的一致,那就動態調試找一下哪一條是服務器下的命令,很簡單就能發現是 On RevokeMsg svrId : %d ,那就好辦了 F5 一下
(3)再分析一哈,v191就應該是服務器下的命令,對應編號應該爲10002(10000+2),而後查看一下這段程序調用的函數彙編,首先是 sub_10483FE0 函數
1 #對sub_10483FE0的彙編調用 2 sub esp, 14h 3 mov ecx, esp; 4 push 0 5 push dword ptr [eax+4] 6 call sub_10483FE0
1 #sub_10483FE0函數的彙編 2 push ebp 3 mov ebp, esp 4 sub esp, 8 5 push esi 6 mov esi, ecx 7 mov ecx, [ebp+arg_0] 8 push edi 9 mov dword ptr [esi], 0 10 mov dword ptr [esi+4], 0 11 mov dword ptr [esi+8], 0 12 mov dword ptr [esi+0Ch], 0 13 mov dword ptr [esi+10h], 0
1 0:000:x86> dd 00efcb00-14 2 00efcb0c 13f0e7f0 000000d6 00000100 00000000
1 0:000:x86> du 13f0e7f0 2 13f0e7f0 "<sysmsg type="revokemsg"><revoke" 3 13f0e830 "msg><session>wxid_xxxxxxxxxxxxx" 4 13f0e870 "</session><msgid>18778893426</msg" 5 13f0e8b0 "id><newmsgid>5379365542789842691" 6 13f0e8f0 "</newmsgid><replacemsg><![CDATA[" 7 13f0e930 ""不知名網友" 撤回了一條消息]]></replacemsg" 8 13f0e970 "></revokemsg></sysmsg>"
(4)到這裏就顯而易見了,出現了 <replacemsg> ,這不就是咱們所想改的地方嗎!!跟以前找撤回命令同樣,找一下關於 replacemsg 在哪裏,實際上也不用那麼找,剛纔執行完 sub_10483FE0 那一部分以後看看後面調用了啥就行,上面那個不是,那就是下面這個。
(5)如何讓消息不撤回到這裏已經很清楚了,只須要在這裏給他按個補丁,一直讓他在else裏走就好,但這裏會有一個問題出現,你的微信上別人沒法撤回消息,你的消息你也撤回不了,豈不是有點尷尬,那就要找一找微信是怎麼區分本身發的撤回指令和其餘人發的指令的函數。
1 if ( v50 == 10000 ) 2 goto LABEL_46;
1 sub_1004E320((int)&v46); 2 ... 3 ... 4 ... 5 v11 = sub_1025A390 ( xmm0_0, v10, a3, a4, (int)&v46);
1 0:013> g 2 *** WARNING: Stack unwind information not available. 3 #別人撤回時 4 012fc2e0 00000001 00000000 00000002 4cdf683f 5 #本身撤回時 6 012fc2e0 00000001 00000001 00000002 4cdf689f
(6)到這裏全部撤回流程就很清楚了,當本身撤回時,就按照正常指令進行操做,當他人撤銷時,將消息撤回置位else,不讓他進入if(true)就能夠實現防撤回的功能了。
3、寫在後面
1.防撤回實現
(1)生成彙編語言代碼,做爲補丁,放入wechatwin.dll所在的文件夾重啓微信
(2)實現:
(3)彩蛋:撤回消息提醒是否是變了,原理全在 sub_102542A0 函數,能夠本身試試。。。。嘿嘿嘿
2.感覺:
逆向是真的麻煩,搞了半天補丁製做(藉助了部分大佬的代碼),才弄出來,結果寫博客的時候微信升級了,雖然看了一下邏輯基本沒變,可是地址都變了,f**k,不想再作一遍補丁了,雖然這個功能挺好用的,可是須要電腦客戶端一直掛着微信就很麻煩,應該改進一下把撤回的消息都發給文件助手就會方便不少(網上有個大佬作過之前版本的),作到一半的時候,都想換題作個什麼CTF雜項專題來着,幸虧仍是一點點堅持下來了,努力也沒算白費(版本一換就不行o(╥﹏╥)o),終於不用寫博客了(*^▽^*)。