source: titan/plugins/tithek/filenuke.h @ 24255

Last change on this file since 24255 was 24255, checked in by obi, 10 years ago

fix

File size: 7.9 KB
Line 
1#ifndef FILENUKE_H
2#define FILENUKE_H
3
4char* filenuke(char* host, char* file, char* hosterurl)
5{
6        debug(99, "in host: %s file: %s", host, file);
7        int debuglevel = getconfigint("debuglevel", NULL);
8        char* tmphost = NULL, *error = NULL, *tmpfile = NULL, *tmpstr = NULL, *send = NULL, *id = NULL, *fname = NULL, *op = NULL, *hash = NULL, *hashlen = NULL, *ip = NULL;
9        char* b36code = NULL, *base = NULL, *search = NULL, *post = NULL, *streamlink = NULL, *cmd = NULL, *tmpstr2 = NULL, *tmpstr3 = NULL, *charlist = NULL;
10
11        if(host == NULL || file == NULL) return NULL;
12
13        tmphost = ostrcat("www.", host, 0, 0);
14        tmpfile = ostrcat("/", file, 0, 0);
15        debug(99, "tmphost: %s", tmphost);
16        ip = get_ip(tmphost);
17        debug(99, "ip: %s", ip);
18        debug(99, "test host only: %s", get_ip(host));
19        debug(99, "tmpfile: %s", tmpfile);
20        tmpstr = gethttp(tmphost, tmpfile, 80, NULL, NULL, 10000, NULL, 0);
21        debug(99, "write file");
22        sleep(2);
23        titheklog(debuglevel, "/tmp/filenuke1_tmpstr", NULL, tmpstr);
24
25        if(ostrstr(tmpstr, "<title>The page is temporarily unavailable</title>") != NULL)
26        {
27                error = string_resub("<td align=\"center\" valign=\"middle\">", "</td>", tmpstr, 0);
28                string_deltags(error);
29                error = string_replace("Terms", "\nTerms", error, 1);
30                error = strstrip(error);
31                if(error == NULL || strlen(error) == 0)
32                        error = ostrcat(_("The page is temporarily unavailable"), error, 0, 1);
33                textbox(_("Message"), error, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1200, 400, 0, 0);
34                goto end;
35        }
36
37        //get hash from tmpstr
38        char* pos1 = ostrstr(tmpstr, "<input type=\"hidden\" name=\"fname\" value=");
39        fname = getxmlentry(pos1, "value=");
40        debug(99, "fname: %s", fname);
41        if(fname == NULL) goto end;
42
43        char* pos2 = ostrstr(tmpstr, "<input type=\"hidden\" name=\"id\" value=");
44        id = getxmlentry(pos2, "value=");
45        debug(99, "id: %s", id);
46        if(id == NULL) goto end;
47
48        char* pos3 = ostrstr(tmpstr, "<input type=\"hidden\" name=\"op\" value=");
49        op = getxmlentry(pos3, "value=");
50        free(tmpstr); tmpstr = NULL;
51        debug(99, "op: %s", op);
52        if(op == NULL) goto end;
53
54        hash = ostrcat(hash, "id=", 1, 0);     
55        hash = ostrcat(hash, id, 1, 0);
56        hash = ostrcat(hash, "&referer=&fname=", 1, 0);
57        hash = ostrcat(hash, fname, 1, 0);
58        hash = ostrcat(hash, "&method_free=Free&usr_login=&op=", 1, 0);
59        hash = ostrcat(hash, op, 1, 0);
60        debug(99, "hash: %s", hash);
61
62        hashlen = oitoa(strlen(hash));
63       
64        //create send string
65        send = ostrcat(send, "POST /", 1, 0);
66        send = ostrcat(send, id, 1, 0);
67        send = ostrcat(send, " HTTP/1.1\r\nContent-Length: ", 1, 0);
68        send = ostrcat(send, hashlen, 1, 0);
69        send = ostrcat(send, "\r\nAccept-Encoding: gzip\r\nConnection: close\r\nUser-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.99 Safari/535.1\r\nHost: ", 1, 0);
70        send = ostrcat(send, host, 1, 0);
71        send = ostrcat(send, "\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n", 1, 0);
72        send = ostrcat(send, hash, 1, 0);
73        debug(99, "send: %s", send);
74
75        sleep(5);
76
77        //send and receive answer
78        post = gethttpreal(tmphost, tmpfile, 80, NULL, NULL, NULL, 0, send, NULL, 5000, 0);
79        titheklog(debuglevel, "/tmp/filenuke2_tmpstr_post1", NULL, post);
80//
81        gethttpreal(tmphost, tmpfile, 80, "/tmp/tithek/post", NULL, NULL, 0, send, NULL, 5000, 0);
82        cmd = ostrcat("cat /tmp/tithek/post | zcat", NULL, 0, 0);
83        debug(99, "cmd: %s", cmd);
84        post = command(cmd);
85        writesys("/tmp/filenuke2_post1", post, 0);
86        free(cmd); cmd = NULL;
87//
88        free(tmpstr),tmpstr = NULL;
89        tmpstr = string_resub(";return p}('", ");'", post, 0);
90        titheklog(debuglevel, "/tmp/filenuke3_tmpstr1", NULL, tmpstr);
91       
92        post = string_replace_all(tmpstr, "", post, 1);
93        post = string_replace_all(";return p}(');'", "", post, 1);
94        titheklog(debuglevel, "/tmp/filenuke4_post2", NULL, post);
95
96        free(tmpstr),tmpstr = NULL;
97        free(b36code),b36code = NULL;
98        tmpstr = string_resub(";return p}('", ");'", post, 0);
99        titheklog(debuglevel, "/tmp/filenuke5_tmpstr2", NULL, tmpstr);
100
101        b36code = oregex(".*;',[0-9]{2,2},[0-9]{2,2},'(.*)'.split.*", post);
102       
103        b36code = string_replace_all("||", "| |", b36code, 1);
104        titheklog(debuglevel, "/tmp/filenuke6_b36code2", NULL, b36code);
105       
106        struct splitstr* ret1 = NULL;
107        int count = 0;
108        int i = 0;
109        ret1 = strsplit(b36code, "|", &count);
110
111        charlist = ostrcat(charlist, "\"", 1, 0);
112        charlist = ostrcat(charlist, "|", 1, 0);
113        charlist = ostrcat(charlist, "'", 1, 0);
114        charlist = ostrcat(charlist, "|", 1, 0);
115        charlist = ostrcat(charlist, ".", 1, 0);
116        charlist = ostrcat(charlist, "|", 1, 0);
117        charlist = ostrcat(charlist, ";", 1, 0);
118        charlist = ostrcat(charlist, "|", 1, 0);
119        charlist = ostrcat(charlist, ":", 1, 0);
120        charlist = ostrcat(charlist, "|", 1, 0);
121        charlist = ostrcat(charlist, "=", 1, 0);
122        charlist = ostrcat(charlist, "|", 1, 0);
123        charlist = ostrcat(charlist, ",", 1, 0);
124        charlist = ostrcat(charlist, "|", 1, 0);
125        charlist = ostrcat(charlist, " ", 1, 0);
126        charlist = ostrcat(charlist, "|", 1, 0);
127        charlist = ostrcat(charlist, "\\", 1, 0);
128        charlist = ostrcat(charlist, "|", 1, 0);
129        charlist = ostrcat(charlist, "/", 1, 0);
130        charlist = ostrcat(charlist, "|", 1, 0);
131        charlist = ostrcat(charlist, "(", 1, 0);
132        charlist = ostrcat(charlist, "|", 1, 0);
133        charlist = ostrcat(charlist, ")", 1, 0);
134
135        for(i = 0; i < count; i++)
136        {
137                if(ostrstr((&ret1[i])->part, " ") != NULL)
138                {
139                        printf("continue\n");
140                        continue;
141                }
142                char* x = oltostr(i, 36);
143
144                struct splitstr* ret2 = NULL;
145                int count2 = 0;
146                int i2 = 0;
147                tmpstr2 = ostrcat(charlist, NULL, 0, 0);
148                ret2 = strsplit(tmpstr2, "|", &count2);
149                for(i2 = 0; i2 < count2; i2++)
150                {
151                        struct splitstr* ret3 = NULL;
152                        int count3 = 0;
153                        int i3 = 0;
154                        tmpstr3 = ostrcat(charlist, NULL, 0, 0);
155                        ret3 = strsplit(tmpstr3, "|", &count3);
156                        for(i3 = 0; i3 < count3; i3++)
157                        {
158                                debug(99, "-----------------------------------------------");
159                                debug(99, "replace %s%s%s <> %s%s%s",(&ret2[i2])->part, x, (&ret3[i3])->part, (&ret2[i2])->part, (&ret1[i])->part, (&ret3[i3])->part);
160
161                                base = ostrcat(base, (&ret2[i2])->part, 1, 0);
162                                base = ostrcat(base, x, 1, 0);
163                                base = ostrcat(base, (&ret3[i3])->part, 1, 0);         
164                                search = ostrcat(search, (&ret2[i2])->part, 1, 0);
165                                search = ostrcat(search, (&ret1[i])->part, 1, 0);
166                                search = ostrcat(search, (&ret3[i3])->part, 1, 0);
167                                tmpstr = string_replace_all(base, search, tmpstr, 1);
168                                free(base), base = NULL;
169                                free(search), search = NULL;
170                        }
171                        free(ret3), ret3 = NULL;
172                        free(tmpstr3), tmpstr3 = NULL;
173                }
174                free(ret2), ret2 = NULL;
175                free(tmpstr2), tmpstr2 = NULL;
176                free(x);
177        }
178        free(ret1), ret1 = NULL;
179        free(b36code), b36code = NULL;
180        free(post), post = NULL;
181        free(charlist), charlist = NULL;
182
183        titheklog(debuglevel, "/tmp/filenuke7_tmpstr_last", NULL, tmpstr);
184
185        streamlink = oregex(".*file.*(http:.*video.flv).*image.*", tmpstr);
186        if(streamlink == NULL)
187                streamlink = oregex(".*file.*(http:.*video.mp4).*image.*", tmpstr);                             
188
189        if(streamlink == NULL)
190                streamlink = oregex(".*file.*(http:.*video.mkv).*image.*", tmpstr);
191
192        if(streamlink == NULL)
193                streamlink = oregex(".*file.*(http:.*video.avi).*image.*", tmpstr);
194
195        if(streamlink == NULL)
196                streamlink = oregex(".*src=.*(http:.*video.mp4).*\".*", tmpstr);
197
198        if(streamlink == NULL)
199                streamlink = oregex(".*src=.*(http:.*video.mkv).*\".*", tmpstr);
200
201        if(streamlink == NULL)
202                streamlink = oregex(".*src=.*(http:.*video.avi).*\".*", tmpstr);
203               
204        if(streamlink == NULL)
205                streamlink = oregex(".*value=.*(http:.*video.mp4).*\".*", tmpstr);                             
206
207        if(streamlink == NULL)
208                streamlink = oregex(".*value=.*(http:.*video.mkv).*\".*", tmpstr);
209
210        if(streamlink == NULL)
211                streamlink = oregex(".*value=.*(http:.*video.avi).*\".*", tmpstr);                     
212
213        titheklog(debuglevel, "/tmp/filenuke8_streamlink", NULL, streamlink);
214
215        free(tmpstr); tmpstr = NULL;
216
217end:
218
219        free(error); error = NULL;
220        free(tmphost); tmphost = NULL;
221        free(tmpfile); tmpfile = NULL;
222        free(tmpstr); tmpstr = NULL;
223        free(send); send = NULL;
224        free(hash), hash = NULL;
225        free(hashlen), hashlen = NULL;
226        free(op), op = NULL;
227        free(id), id = NULL;
228        free(fname), fname = NULL;
229        free(ip); ip = NULL;
230
231        return streamlink;
232}
233
234#endif
Note: See TracBrowser for help on using the repository browser.