免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 回復 發帖

破解序號

原創:FB 陳盈豪   

破解需要序號的軟體~什麼!CIH自動化程式只需要幾秒鐘!?
註:CIH此篇貼文只是單純技術的研究與教學
CIH一直說最基本技術功力與DEBUG能力是最~最重要。
假如你有套軟體,你已經有序號。
你在其他電腦使用這組序號,完全沒用,因為序號產生來自整個PC環境。
即使你利用VM把正版序號整個系統做成image,給第二台電腦用,也是沒用,因為序號產生也因為上網環境不同而不同。
ptrace
ptrace
ptrace
ptrace是Linux的一個function,做process trace。
利用ptrace把有序號軟體執行過,就可以紀錄所有跑過的組合語言指令位址log1。
再把錯誤序號軟體執行,得到log2。
兩個簡單diff一下就知道從哪個執行位址開始不同,那個組合語言就是判斷正確序號的地方。
只需要30行程式~(以下有CIH簡單範例)
方法無敵簡單!
方法無敵簡單!
方法無敵簡單!
CIH很古早以前就寫一個小程式cih-hack,只需要幾秒鐘,就100%全自動破解序號,會產生新的執行檔,這個新的執行檔完全不需要序號就可以正常執行。
一樣先說,此方法是你事先需要一個正確序號。
我把此軟體先改名成xxx,方便示範:
$ cp -a ./serial-number ./serial-number.org
先備份本來序號
$ echo 123 > ./serial-number
$ ./cih-hack ./xxx.hack ./xxx
Check Serial-Number: FAIL
故意先亂填序號,利用cih-hack去執行xxx這個軟體,並產生分析結果存成xxx.hack,執行過程當然是FAIL(錯誤序號)。
$ mv -f ./serial-number.org ./serial-number
$ ./cih-hack ./xxx.hack ./xxx
Check Serial-Number: OK
再把本來正確序號移回來,利用cih-hack再次去執行xxx這個軟體,執行過程是OK(正確序號)。
此時cih-hack程式會找出這兩次執行過程所有組合語言位址從哪裡開始不同,
並且自動暴力修改裡面組合語言,跳離檢查序號的地方,把破解的執行檔寫回xxx.hack。
$ echo 123 > ./serial-number
$ ./xxx.hack
Check Serial-Number: OK
故意亂填序號,執行已經破解的執行檔xxx.hack,果真檢查序號成功。
破解了!!!
破解了!!!
破解了!!!
以下cih-hack-easy.c利用ptrace一個很簡單範例,可以印出執行過程組合語言指令所有跑過的位址,沒有幾行C程式碼。
#include <stdio.h>
#include <unistd.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <sys/user.h>
int main(int argc, char *argv[])
{
        if ( !fork() )
        {
                ptrace(PTRACE_TRACEME, 0, 0, 0);
                execv(argv[1], argv+1);
        }
        else
        {
                pid_t pid;
                int status;
                struct user_regs_struct reg;
                while ( (pid = waitpid(-1, &status, 0)) != -1 )
                {
                        if ( WIFSTOPPED(status) )
                        {
                                ptrace(PTRACE_GETREGS, pid, 0, &reg);
                                fprintf(stderr, "%08x\n", (unsigned int)reg.rip);
                                ptrace(PTRACE_SINGLESTEP, pid, 0, 0);
                        }
                }
        }
        return 0;
}
$ ./cih-hack-easy /bin/echo CIH_HACKER 2> log
CIH_HACKER
$ cat log
8b001530
8b001533
8b004ad0
8b004ad1
8b004ad4
8b004ad6
8b004ad8
8b004ada
8b004adc
8b004adf
...
<省略>
光簡單的cih-hack-easy就可以用來逆向工程分析程式執行過程。
你只要改這個簡單範例cih-hack-easy.c,
新增fork、pthread處理,
新增判斷兩次比對從哪個組合語言指令位址不同,並且修改執行檔組合語言,存成另一個破解版執行檔。
這樣寫就可以寫成cih-hack.c這個程式囉,真的很簡單就可以寫完,大家可以開始動手寫囉~
返回列表