riderkick / FMD

Forked from https://sf.net/p/fmd/
GNU General Public License v2.0
720 stars 213 forks source link

KISSMANGA ISSUES #538

Closed kevin01523 closed 7 years ago

kevin01523 commented 7 years ago

kissmanga doesnt work right now it can get new chapters but fails to download the said chapters

=== Log Session Started at 3/18/2017 15:08:25 by Free Manga Downloader ===
15:08:25:143 INFO: "Free Manga Downloader" started with [PID:9272] [HANDLE:4294967295]
15:08:25:143 STRINGS: Application info
               Application       : Free Manga Downloader
               Version           : 0.9.104.0
               Product Version   : Win32 Debug
               Host Machine      : Windows 10 64-bit
               Target CPU_OS     : i386_Win32
               FPC Version       : 3.1.1
               LCL Version       : 1.7
               Path              : C:\Games\FMD\fmd.exe
               Process ID        : 9272
               MainThread ID     : 2392
15:09:11:166 WARNING: TTaskThread, checkforfinish failed=39/39 "Marginal Operation" > "Marginal Operation Vol.003 Ch.015.002 New Moon Festival"
15:10:41:271 WARNING: TTaskThread, checkforfinish failed=20/20 "Arifureta Shokugyou de Sekai Saikyou" > "Arifureta Shokugyou de Sekai Saikyou Ch.010 Yue's Meal"
15:12:29:354 WARNING: TTaskThread, checkforfinish failed=20/20 "Arifureta Shokugyou de Sekai Saikyou" > "Arifureta Shokugyou de Sekai Saikyou Ch.010 Yue's Meal"
15:16:26:586 WARNING: TTaskThread, checkforfinish failed=1/1 "Arifureta Shokugyou de Sekai Saikyou" > "Arifureta Shokugyou de Sekai Saikyou Ch.010 Yue's Meal"
15:16:30:500 INFO: TMainForm.FormClose
15:16:31:694 INFO: TMainForm.CloseNow, disabling all timer
15:16:31:695 INFO: TMainForm.CloseNow, backup downloads
15:16:32:137 INFO: TMainForm.CloseNow, backup favorites
15:16:32:646 INFO: TMainForm.CloseNow, backup all data to file
15:16:32:651 INFO: TMainForm.CloseNow, closing other forms
15:16:32:651 INFO: TMainForm.CloseNow, stop ipc server
15:16:32:673 INFO: TMainForm.FormDestroy, freeing all objects
15:16:33:624 INFO: "Free Manga Downloader" exit normally [PID:9272] [HANDLE:4294967295]

here's the last part of the LOG

IVI00101 commented 7 years ago

Have same problem. MangaFox works, so only KissManga affected.

Leguron commented 7 years ago

I also only have a problem downloading from Kissmanga.

hlaxkar commented 7 years ago

same here

R-Jimenez commented 7 years ago

Another issue case here. If this keeps faltering may have to see about arduously transferring bookmarks to another site.

carry101 commented 7 years ago

+1, kissmanga doesn't download properly

riderkick commented 7 years ago

@kavin-90 can you please check this. They using a new encryption to hide the image url string.

molitar commented 7 years ago

Same here.. does not download.

kavin-90 commented 7 years ago

Okay @riderkick i checked there is changes were made on reader now images is using hashing

Image Src


 var lstImages = new Array();

                lstImages.push(wrapKA("7CbqoWRMeBuTo+1jt5GegbiMyMGv6cmja7swFUHYrWtPnKr0ERe6ygjSETKMDhLTx0EVUve55aJgiHmX7NLgI1qQGPmkf0ZM8zD/V78G78hPDqhjUisMqiTTWQyYKm3XbBi3IiCdTSVdhVFeJA+AepRdDjhkxtQmYJKpUUnh7Pt6QxEfmyo83rRuwZVfwCzdin3WUo0wr9cKcTCHfJ4QkNgpvorKsw/FVwjCKzVZ3HE8B2kNA9TFsFX8TEPP1hPZ"));

                lstImages.push(wrapKA("7CbqoWRMeBuTo+1jt5GegSpH8Ae2IO7TBBCSeCCLuaq96wjrAi42prU/OvHMq5KS5jddbDUf679XJIjAQk3eQiEQRfzrUtdWQ2zymgER/qZQbDkG4sePDcuTLlnzMzEhh4dHLZpmaBlQr20C770Ez8sxhoGxA3QFqfJci4BjEyDBJCx3UIXqjbFkRFX5FZTd6szxT1zUGTlBK3CrYLyxB+6rCCJqY+9K1JQCE4gsapGq3swnKsilvWIHzncKwX2Z"));

                lstImages.push(wrapKA("7CbqoWRMeBuTo+1jt5GegerxHT4eR8b9Qlo6cwIZojmGOgaZT0yVMVIzSp1ZaJuq52fH7w6iStDstQgXcGlYgIH8rzyAaQYyRVl2/XrcnZy52qKlsJRx94CNP5n1xfBzGnFgJVDWe8ul/54+Sej3rVclctqa2CfqFeItCawWmcgeKRbPjRb5/FrfFkt1jJRGWsxCPuCAh8edtZNJCMTWp94pbmknui4UNTTTxwUMhtpr0jz0wUIS+UoV+m/h4LcB"));

                lstImages.push(wrapKA("7CbqoWRMeBuTo+1jt5GegUPuMmW9DjFPaHYlgDhzDWRJy4Rf5ABbkmnUfcO3pI+4P+akMokjGFNuncfY/XBFpFPCiq/xqO6LfeXnF7QW3Tlv9kJAQVZo/jGZ3YW/KXgDOBN+nWwtVPZ9B2JTrGf8/m1bcYz5Ue6S9gCI5G07BD/ETkYfNfDovLYnqUiTdw9LO9XoxQGuhaeUcwH9KozBVu5e3fqBvC4z2jkqoiAgWlbKshPhdkLpPilk9KO/bplt"));

                lstImages.push(wrapKA("7CbqoWRMeBuTo+1jt5GegV6iPQd6KokJstOg0WWSk+0235SUdMz97/vyFRrI4c9AvD7xV7caxgDHPbMUubA+pL6Zj64ueQ8yy1blLCiD7uJZbRexk4iMheQ40aBd38+zuZmuaxQ9o9PqDTw6aYv8OiPsBUBLnCd/WLhke81IRVEYL2ZlrJKz304wj3HOOgFd3nQu6KPPAmTz9jhDKCS56aMj/PsCKdzBdF6yttFj2hw9vAPBOQ+Z+qBaRyofPNZr"));

                lstImages.push(wrapKA("7CbqoWRMeBuTo+1jt5GegdHJgeLCQJUaTfOvU2oeGnU79N5Wc5E9YbVzAG40yCnS51BNosFZ+q/GD1xHYU9e2L5C6+qBU5VwtZDVsef1/icV3/mUsj8LVuWKwPML48XIdLwkECk7kcV+fnuPOeU/EjXadaiNFTqXuKB4eerLy2CTFr48pKOI68/QFcdvQRRw2Dd2hjgf4DdS5yKlc7pGtn67VLOuwBYz1IPvoTCLSHHGjJXCbDGKtOs3fCf1Y1Sm"));

                lstImages.push(wrapKA("7CbqoWRMeBuTo+1jt5GegW1xWgmC7Im6UZQrFTmmy7iycXPnGvIbIo6HTYjAIsNqPvbCSID9olrZ/pr0+6c/u0Xo+XGaquil1rFpqnccpNb51MHJ33AJt+NklFPFlva8I80OG0SgzajwSMjSHCF5twK3W8tjc4mmbz6uST2oS+Ww/hRwXeQA8zc9Z7v20r7yqvvEI04SGZHxiv27vNDOnR6VCc/xLU1veKClzlXbseBByKSjr36FNNMZRM2W4gvs"));

                lstImages.push(wrapKA("7CbqoWRMeBuTo+1jt5GegVEUyFM+TGmWf7PwC0Osno5E4tg0Y6GumIqZU1AIutnp+g4LYwerkRYCfGrGvofirux8zSis05Gbg4/o/RKpHv3xGyQy6l/nF7SbDMHpRY5eSmnnEaz4mJdewITPRx20f10ENciWZ66FmlqOwiC2bkwHBHEYffR00HSX4Mav1Jypq9XK9qlIH/oRKNWf5ZbcggbkkSRDsgmTjYW2nFufep411fzJ0uRAh0tbtm/HC+x8"));

                lstImages.push(wrapKA("7CbqoWRMeBuTo+1jt5GegeVWw5dmAR3LMrdpNHq+s7ngGYtjbv1IZWiBZuicYYojfY4qp+b6cEQY1ZqsZ0ralLKUjB4nAEbFOYuSnrtAbk+8mwgxublRgI1YhffoIDFGFN6FT7ZscNsyDNyuXkX0+XldNEFMCJIMRPdi2IS43+WzBQzJ4eS3nF9DA9myBHB3mT48l725sBasSYgxwnfbchycBz/SPoF9Q3Clcyh4XTJtrvqyG/TRXBgbagUompVq"));

                lstImages.push(wrapKA("7CbqoWRMeBuTo+1jt5GegfNkaqc9x8+yP00Mjhyrd3qPFlNFSrbkgw5rWFED0M2Z1UHa7R3M5w8fm4IUEbyELeCMGWsNgJrbsAbQaXY+4vsXw22t8fQaTIy3O0iO592r3Jydnycih1g5jNjzL3Cmad3mfafA0LpOBw4DryCyToOvDqycTkh0N8bmKOejug3p7z5zxljsy/opoEQrqToaJP9s+A7jOiGCKYj00gTAzUsNN9COutv71WjK9EObY5yc"));

as you see they're using some decoding function t decryption of file url

Wrapka function exists in cryptojs

var _0x331e=["\x6C\x69\x62","\x57\x6F\x72\x64\x41\x72\x72\x61\x79","\x48\x61\x73\x68\x65\x72","\x61\x6C\x67\x6F","\x73\x71\x72\x74","\x70\x6F\x77","\x53\x48\x41\x32\x35\x36","\x5F\x68\x61\x73\x68","\x73\x6C\x69\x63\x65","\x69\x6E\x69\x74","\x77\x6F\x72\x64\x73","\x5F\x64\x61\x74\x61","\x5F\x6E\x44\x61\x74\x61\x42\x79\x74\x65\x73","\x73\x69\x67\x42\x79\x74\x65\x73","\x66\x6C\x6F\x6F\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x61\x6C\x6C","\x63\x6C\x6F\x6E\x65","\x65\x78\x74\x65\x6E\x64","\x48\x6D\x61\x63\x53\x48\x41\x32\x35\x36","\x61\x35\x65\x38\x65\x32\x65\x39\x63\x32\x37\x32\x31\x62\x65\x30\x61\x38\x34\x61\x64\x36\x36\x30\x63\x34\x37\x32\x63\x31\x66\x33","\x6D\x73\x68\x73\x64\x66\x38\x33\x32\x6E\x73\x64\x62\x61\x73\x68\x32\x30\x61\x73\x64\x6D","\x70\x61\x72\x73\x65","\x48\x65\x78","\x65\x6E\x63","\x42\x61\x73\x65\x36\x34","\x63\x72\x65\x61\x74\x65","\x43\x69\x70\x68\x65\x72\x50\x61\x72\x61\x6D\x73","\x43\x42\x43","\x6D\x6F\x64\x65","\x50\x6B\x63\x73\x37","\x70\x61\x64","\x64\x65\x63\x72\x79\x70\x74","\x41\x45\x53"];(function(_0xfac5x1){for(var _0xfac5x2=CryptoJS,_0xfac5x3=_0xfac5x2[_0x331e[0]],_0xfac5x4=_0xfac5x3[_0x331e[1]],_0xfac5x5=_0xfac5x3[_0x331e[2]],_0xfac5x3=_0xfac5x2[_0x331e[3]],_0xfac5x6=[],_0xfac5x7=[],_0xfac5x8=function(_0xfac5xb){return 4294967296*(_0xfac5xb-(_0xfac5xb|0))|0},_0xfac5x9=2,_0xfac5xa=0;64>_0xfac5xa;){var _0xfac5xc;a:{_0xfac5xc=_0xfac5x9;for(var _0xfac5xd=_0xfac5x1[_0x331e[4]](_0xfac5xc),_0xfac5xe=2;_0xfac5xe<=_0xfac5xd;_0xfac5xe++){if(!(_0xfac5xc%_0xfac5xe)){_0xfac5xc=!1;break a}};_0xfac5xc=!0}_0xfac5xc&&(8>_0xfac5xa&&(_0xfac5x6[_0xfac5xa]=_0xfac5x8(_0xfac5x1[_0x331e[5]](_0xfac5x9,0.5))),_0xfac5x7[_0xfac5xa]=_0xfac5x8(_0xfac5x1[_0x331e[5]](_0xfac5x9,1/3)),_0xfac5xa++);_0xfac5x9++};var _0xfac5xf=[],_0xfac5x3=_0xfac5x3[_0x331e[6]]=_0xfac5x5[_0x331e[18]]({_doReset:function(){this[_0x331e[7]]=new _0xfac5x4[_0x331e[9]](_0xfac5x6[_0x331e[8]](0))},_doProcessBlock:function(_0xfac5xb,_0xfac5x3){for(var _0xfac5x10=this[_0x331e[7]][_0x331e[10]],_0xfac5x11=_0xfac5x10[0],_0xfac5xc=_0xfac5x10[1],_0xfac5xa=_0xfac5x10[2],_0xfac5x1=_0xfac5x10[3],_0xfac5x12=_0xfac5x10[4],_0xfac5x2=_0xfac5x10[5],_0xfac5x5=_0xfac5x10[6],_0xfac5x9=_0xfac5x10[7],_0xfac5x13=0;64>_0xfac5x13;_0xfac5x13++){if(16>_0xfac5x13){_0xfac5xf[_0xfac5x13]=_0xfac5xb[_0xfac5x3+ _0xfac5x13]|0}else{var _0xfac5x14=_0xfac5xf[_0xfac5x13- 15],_0xfac5x15=_0xfac5xf[_0xfac5x13- 2];_0xfac5xf[_0xfac5x13]=((_0xfac5x14<<25|_0xfac5x14>>>7)^(_0xfac5x14<<14|_0xfac5x14>>>18)^_0xfac5x14>>>3)+ _0xfac5xf[_0xfac5x13- 7]+((_0xfac5x15<<15|_0xfac5x15>>>17)^(_0xfac5x15<<13|_0xfac5x15>>>19)^_0xfac5x15>>>10)+ _0xfac5xf[_0xfac5x13- 16]};_0xfac5x14=_0xfac5x9+((_0xfac5x12<<26|_0xfac5x12>>>6)^(_0xfac5x12<<21|_0xfac5x12>>>11)^(_0xfac5x12<<7|_0xfac5x12>>>25))+(_0xfac5x12&_0xfac5x2^~_0xfac5x12&_0xfac5x5)+ _0xfac5x7[_0xfac5x13]+ _0xfac5xf[_0xfac5x13];_0xfac5x15=((_0xfac5x11<<30|_0xfac5x11>>>2)^(_0xfac5x11<<19|_0xfac5x11>>>13)^(_0xfac5x11<<10|_0xfac5x11>>>22))+(_0xfac5x11&_0xfac5xc^_0xfac5x11&_0xfac5xa^_0xfac5xc&_0xfac5xa);_0xfac5x9=_0xfac5x5;_0xfac5x5=_0xfac5x2;_0xfac5x2=_0xfac5x12;_0xfac5x12=_0xfac5x1+ _0xfac5x14|0;_0xfac5x1=_0xfac5xa;_0xfac5xa=_0xfac5xc;_0xfac5xc=_0xfac5x11;_0xfac5x11=_0xfac5x14+ _0xfac5x15|0};_0xfac5x10[0]=_0xfac5x10[0]+ _0xfac5x11|0;_0xfac5x10[1]=_0xfac5x10[1]+ _0xfac5xc|0;_0xfac5x10[2]=_0xfac5x10[2]+ _0xfac5xa|0;_0xfac5x10[3]=_0xfac5x10[3]+ _0xfac5x1|0;_0xfac5x10[4]=_0xfac5x10[4]+ _0xfac5x12|0;_0xfac5x10[5]=_0xfac5x10[5]+ _0xfac5x2|0;_0xfac5x10[6]=_0xfac5x10[6]+ _0xfac5x5|0;_0xfac5x10[7]=_0xfac5x10[7]+ _0xfac5x9|0},_doFinalize:function(){var _0xfac5xc=this[_0x331e[11]],_0xfac5xa=_0xfac5xc[_0x331e[10]],_0xfac5x10=8*this[_0x331e[12]],_0xfac5x11=8*_0xfac5xc[_0x331e[13]];_0xfac5xa[_0xfac5x11>>>5]|=128<<24- _0xfac5x11%32;_0xfac5xa[(_0xfac5x11+ 64>>>9<<4)+ 14]=_0xfac5x1[_0x331e[14]](_0xfac5x10/4294967296);_0xfac5xa[(_0xfac5x11+ 64>>>9<<4)+ 15]=_0xfac5x10;_0xfac5xc[_0x331e[13]]=4*_0xfac5xa[_0x331e[15]];this._process();return this[_0x331e[7]]},clone:function(){var _0xfac5xa=_0xfac5x5[_0x331e[17]][_0x331e[16]](this);_0xfac5xa[_0x331e[7]]=this[_0x331e[7]][_0x331e[17]]();return _0xfac5xa}});_0xfac5x2[_0x331e[6]]=_0xfac5x5._createHelper(_0xfac5x3);_0xfac5x2[_0x331e[19]]=_0xfac5x5._createHmacHelper(_0xfac5x3)})(Math);var boxzq=_0x331e[20];var chko=_0x331e[21];var iv,key;iv=CryptoJS[_0x331e[24]][_0x331e[23]][_0x331e[22]](boxzq);key=CryptoJS.SHA256(chko);function wrapKA(_0xfac5x1b){var _0xfac5x1c=null;try{var _0xfac5x1d=CryptoJS[_0x331e[0]][_0x331e[27]][_0x331e[26]]({ciphertext:CryptoJS[_0x331e[24]][_0x331e[25]][_0x331e[22]](_0xfac5x1b)});var _0xfac5x1e=CryptoJS[_0x331e[33]][_0x331e[32]](_0xfac5x1d,key,{mode:CryptoJS[_0x331e[29]][_0x331e[28]],iv:iv,padding:CryptoJS[_0x331e[31]][_0x331e[30]]});_0xfac5x1c=_0xfac5x1e.toString(CryptoJS[_0x331e[24]].Utf8);return _0xfac5x1c}catch(err){alert(err)}} .


<script type="text/javascript">
                            var _0xa5a2 = ["\x37\x32\x6E\x6E\x61\x73\x64\x61\x73\x64\x39\x61\x73\x64\x6E\x31\x32\x33"]; chko = _0xa5a2[0]; key = CryptoJS.SHA256(chko)
                        </script>
riderkick commented 7 years ago

@kavin-90 I'm not good at javascript. Can't follow it. Can you translate it to C/C++ or Java.

var _0x331e = ["lib", "WordArray", "Hasher", "algo", "sqrt", "pow", "SHA256", "_hash", "slice", "init", "words", "_data", "_nDataBytes", "sigBytes", "floor", "length", "call", "clone", "extend", "HmacSHA256", "a5e8e2e9c2721be0a84ad660c472c1f3", "mshsdf832nsdbash20asdm", "parse", "Hex", "enc", "Base64", "create", "CipherParams", "CBC", "mode", "Pkcs7", "pad", "decrypt", "AES"];
(function (_0xfac5x1) {
    for (var _0xfac5x2 = CryptoJS, _0xfac5x3 = _0xfac5x2[_0x331e[0]], _0xfac5x4 = _0xfac5x3[_0x331e[1]], _0xfac5x5 = _0xfac5x3[_0x331e[2]], _0xfac5x3 = _0xfac5x2[_0x331e[3]], _0xfac5x6 = [], _0xfac5x7 = [], _0xfac5x8 = function (_0xfac5xb) {
        return 4294967296 * (_0xfac5xb - (_0xfac5xb | 0)) | 0
    }, _0xfac5x9 = 2, _0xfac5xa = 0; 64 > _0xfac5xa; ) {
        var _0xfac5xc;
        a: {
            _0xfac5xc = _0xfac5x9;
            for (var _0xfac5xd = _0xfac5x1[_0x331e[4]](_0xfac5xc), _0xfac5xe = 2; _0xfac5xe <= _0xfac5xd; _0xfac5xe++) {
                if (!(_0xfac5xc % _0xfac5xe)) {
                    _0xfac5xc = !1;
                    break a
                }
            };
            _0xfac5xc = !0
        }
        _0xfac5xc && (8 > _0xfac5xa && (_0xfac5x6[_0xfac5xa] = _0xfac5x8(_0xfac5x1[_0x331e[5]](_0xfac5x9, 0.5))), _0xfac5x7[_0xfac5xa] = _0xfac5x8(_0xfac5x1[_0x331e[5]](_0xfac5x9, 1 / 3)), _0xfac5xa++);
        _0xfac5x9++
    };
    var _0xfac5xf = [],
    _0xfac5x3 = _0xfac5x3[_0x331e[6]] = _0xfac5x5[_0x331e[18]]({
            _doReset: function () {
                this[_0x331e[7]] = new _0xfac5x4[_0x331e[9]](_0xfac5x6[_0x331e[8]](0))
            },
            _doProcessBlock: function (_0xfac5xb, _0xfac5x3) {
                for (var _0xfac5x10 = this[_0x331e[7]][_0x331e[10]], _0xfac5x11 = _0xfac5x10[0], _0xfac5xc = _0xfac5x10[1], _0xfac5xa = _0xfac5x10[2], _0xfac5x1 = _0xfac5x10[3], _0xfac5x12 = _0xfac5x10[4], _0xfac5x2 = _0xfac5x10[5], _0xfac5x5 = _0xfac5x10[6], _0xfac5x9 = _0xfac5x10[7], _0xfac5x13 = 0; 64 > _0xfac5x13; _0xfac5x13++) {
                    if (16 > _0xfac5x13) {
                        _0xfac5xf[_0xfac5x13] = _0xfac5xb[_0xfac5x3 + _0xfac5x13] | 0
                    } else {
                        var _0xfac5x14 = _0xfac5xf[_0xfac5x13 - 15],
                        _0xfac5x15 = _0xfac5xf[_0xfac5x13 - 2];
                        _0xfac5xf[_0xfac5x13] = ((_0xfac5x14 << 25 | _0xfac5x14 >>> 7) ^ (_0xfac5x14 << 14 | _0xfac5x14 >>> 18) ^ _0xfac5x14 >>> 3) + _0xfac5xf[_0xfac5x13 - 7] + ((_0xfac5x15 << 15 | _0xfac5x15 >>> 17) ^ (_0xfac5x15 << 13 | _0xfac5x15 >>> 19) ^ _0xfac5x15 >>> 10) + _0xfac5xf[_0xfac5x13 - 16]
                    };
                    _0xfac5x14 = _0xfac5x9 + ((_0xfac5x12 << 26 | _0xfac5x12 >>> 6) ^ (_0xfac5x12 << 21 | _0xfac5x12 >>> 11) ^ (_0xfac5x12 << 7 | _0xfac5x12 >>> 25)) + (_0xfac5x12 & _0xfac5x2 ^ ~_0xfac5x12 & _0xfac5x5) + _0xfac5x7[_0xfac5x13] + _0xfac5xf[_0xfac5x13];
                    _0xfac5x15 = ((_0xfac5x11 << 30 | _0xfac5x11 >>> 2) ^ (_0xfac5x11 << 19 | _0xfac5x11 >>> 13) ^ (_0xfac5x11 << 10 | _0xfac5x11 >>> 22)) + (_0xfac5x11 & _0xfac5xc ^ _0xfac5x11 & _0xfac5xa ^ _0xfac5xc & _0xfac5xa);
                    _0xfac5x9 = _0xfac5x5;
                    _0xfac5x5 = _0xfac5x2;
                    _0xfac5x2 = _0xfac5x12;
                    _0xfac5x12 = _0xfac5x1 + _0xfac5x14 | 0;
                    _0xfac5x1 = _0xfac5xa;
                    _0xfac5xa = _0xfac5xc;
                    _0xfac5xc = _0xfac5x11;
                    _0xfac5x11 = _0xfac5x14 + _0xfac5x15 | 0
                };
                _0xfac5x10[0] = _0xfac5x10[0] + _0xfac5x11 | 0;
                _0xfac5x10[1] = _0xfac5x10[1] + _0xfac5xc | 0;
                _0xfac5x10[2] = _0xfac5x10[2] + _0xfac5xa | 0;
                _0xfac5x10[3] = _0xfac5x10[3] + _0xfac5x1 | 0;
                _0xfac5x10[4] = _0xfac5x10[4] + _0xfac5x12 | 0;
                _0xfac5x10[5] = _0xfac5x10[5] + _0xfac5x2 | 0;
                _0xfac5x10[6] = _0xfac5x10[6] + _0xfac5x5 | 0;
                _0xfac5x10[7] = _0xfac5x10[7] + _0xfac5x9 | 0
            },
            _doFinalize: function () {
                var _0xfac5xc = this[_0x331e[11]],
                _0xfac5xa = _0xfac5xc[_0x331e[10]],
                _0xfac5x10 = 8 * this[_0x331e[12]],
                _0xfac5x11 = 8 * _0xfac5xc[_0x331e[13]];
                _0xfac5xa[_0xfac5x11 >>> 5] |= 128 << 24 - _0xfac5x11 % 32;
                _0xfac5xa[(_0xfac5x11 + 64 >>> 9 << 4) + 14] = _0xfac5x1[_0x331e[14]](_0xfac5x10 / 4294967296);
                _0xfac5xa[(_0xfac5x11 + 64 >>> 9 << 4) + 15] = _0xfac5x10;
                _0xfac5xc[_0x331e[13]] = 4 * _0xfac5xa[_0x331e[15]];
                this._process();
                return this[_0x331e[7]]
            },
            clone: function () {
                var _0xfac5xa = _0xfac5x5[_0x331e[17]][_0x331e[16]](this);
                _0xfac5xa[_0x331e[7]] = this[_0x331e[7]][_0x331e[17]]();
                return _0xfac5xa
            }
        });
    _0xfac5x2[_0x331e[6]] = _0xfac5x5._createHelper(_0xfac5x3);
    _0xfac5x2[_0x331e[19]] = _0xfac5x5._createHmacHelper(_0xfac5x3)
})(Math);
var boxzq = _0x331e[20];
var chko = _0x331e[21];
var iv, key;
iv = CryptoJS[_0x331e[24]][_0x331e[23]][_0x331e[22]](boxzq);
key = CryptoJS.SHA256(chko);
function wrapKA(_0xfac5x1b) {
    var _0xfac5x1c = null;
    try {
        var _0xfac5x1d = CryptoJS[_0x331e[0]][_0x331e[27]][_0x331e[26]]({
                ciphertext: CryptoJS[_0x331e[24]][_0x331e[25]][_0x331e[22]](_0xfac5x1b)
            });
        var _0xfac5x1e = CryptoJS[_0x331e[33]][_0x331e[32]](_0xfac5x1d, key, {
                mode: CryptoJS[_0x331e[29]][_0x331e[28]],
                iv: iv,
                padding: CryptoJS[_0x331e[31]][_0x331e[30]]
            });
        _0xfac5x1c = _0xfac5x1e.toString(CryptoJS[_0x331e[24]].Utf8);
        return _0xfac5x1c
    } catch (err) {
        alert(err)
    }
}
.

<script type = "text/javascript">
  var _0xa5a2 = ["72nnasdasd9asdn123"];
  chko = _0xa5a2[0];
  key = CryptoJS.SHA256(chko)
</script>
kavin-90 commented 7 years ago

@riderkick i think https://synopse.info/forum/viewtopic.php?id=3549 maybe help?

@riderkick i don't know javascript/pascal/c/c++/java well.

lupusrex1111 commented 7 years ago

are u guys working on the issue now? i usually download from kissmanga coz of their high resolution img.

kavin-90 commented 7 years ago

It's under process we decoded required keys for decryption. Its currently being test on PHP after that we convert it to PASCAL.

riderkick commented 7 years ago

Most of those high resolution image is leached from batoto. An example of image url that I often found from kissmanga.

https://images1-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image/*&url=http://img.bato.to/comics/2016/04/24/i/read571ce588a2444/img000001.jpg&imgmax=30000

There is more website that's worth the hassle than kissmanga. I personally never use kissmanga, I often use batoto or mangatraders.

riderkick commented 7 years ago

I need to know what kind of encryption it is. I can't even find the key. 😞

kavin-90 commented 7 years ago

I also use Batoto for reading or scanlation group site because they've HQ Images.

kavin-90 commented 7 years ago

http://ddecode.com/hexdecoder/?results=4765b9ccbc600ffde533059d6fd81c16

there is converted main part of script

It use SHA1, HmacSHA256 , CipherParams i think CBC , mode Pkcs7 , decrypt AES

R-Jimenez commented 7 years ago

Thanks again for all the hard work you guys do. It definitely seems like KM is going further and further to try and stop botters. If I didn't have close to 300 series already being monitored for my library, I wouldn't think twice about moving over to Batoto.

I remember DomDomSoft had a feature like that, which would transfer bookmarks over from one site to another. I think that would be useful here, even if it didn't necessarily map the current chapter (just removes current bookmark on X site and adds a new one on Y site, without having to worry about what the current is).

riderkick commented 7 years ago
var boxzq = "a5e8e2e9c2721be0a84ad660c472c1f3";
var chko = "mshsdf832nsdbash20asdm";
var iv, key;
iv = CryptoJS.enc.Hex.parse(boxzq);
key = CryptoJS.SHA256(chko);
function wrapKA(INPUT) {
    var c = null;
    try {
        var a = CryptoJS.lib.CipherParams.create({
                ciphertext: CryptoJS.enc.Base64.parse(INPUT)
            });
        var b = CryptoJS.AES.decrypt.(a, key, {
                mode: CryptoJS.mode.CBC,
                iv: iv,
                padding: CryptoJS.pad.Pkcs7
            });
        c = b.toString(CryptoJS.enc.Utf8);
        return c
    } catch (err) {
        alert(err)
    }
}

conclusion:

key := SHA256('mshsdf832nsdbash20asdm');
iv:= array [0..15] of byte = ($a5, $e8, $e2, $e9, $c2, $72, $1b, $e0, $a8, $4a, $d6, $60, $c4, $72, $c1, $f3);
mode := CBC;
pad := Pkcs7;
result := utf8tostring(AES.Decrypt(input, key, iv, mode, pad));

@kavin-90 do the key even fixed/not dynamically changed ?

kavin-90 commented 7 years ago

they've set 2 keys and 2nd override 1st key.

Both of them are fixed.

$key = "ec5d16821839056176d17db837378fc57875aae170e3365212c2ca9aa7e1c55e"; $iv = "a5e8e2e9c2721be0a84ad660c472c1f3";

kavin-90 commented 7 years ago

@riderkick i made php function can u turn it into pascal?

<?php
//Now we receive the encrypted from the post, we should decode it from base64,
$encrypted = "mqE5Ec6bMuj1NMBmDOpSxyjSkBzltsgB0x0lfaDyf9yHDBxb58oZjD/kRjqIMci9jThH57/VH4U4agj1wVHgYU6ZtcxYP8sIPriDJo7m/57jGdcoODhQpj2mUVQwX6iiT+ifS1IMU0ZsEdeQC+eymg==";

$key = pack("H*", "ec5d16821839056176d17db837378fc57875aae170e3365212c2ca9aa7e1c55e");
$iv =  pack("H*", "a5e8e2e9c2721be0a84ad660c472c1f3");
$encrypted = base64_decode($encrypted);
$decrypt_string = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv);

echo $decrypt_string;

?>

output

http://2.bp.blogspot.com/-_G_jYPRi65o/V4-Hw-1tgII/AAAAAAAAEFg/fM1Rk4BAuu05yCcV31hzBhzz8RnIqEWMACCo/s0/000.jpg

riderkick commented 7 years ago

Should not close this issue.

riderkick commented 7 years ago

From where you get the key? It's not hashed w/ SHA256 but plain hexa array?

riderkick commented 7 years ago

Only work with your example, but not work with an actual encrypted text.

7CbqoWRMeBuTo+1jt5GegfNkaqc9x8+yP00Mjhyrd3qPFlNFSrbkgw5rWFED0M2Z1UHa7R3M5w8fm4IUEbyELeCMGWsNgJrbsAbQaXY+4vsXw22t8fQaTIy3O0iO592r3Jydnycih1g5jNjzL3Cmad3mfafA0LpOBw4DryCyToOvDqycTkh0N8bmKOejug3p7z5zxljsy/opoEQrqToaJP9s+A7jOiGCKYj00gTAzUsNN9COutv71WjK9EObY5yc

Maybe using different key or init vector?

using syncrypto:

const
  iv: TAESBlock =
    ($a5, $e8, $e2, $e9, $c2, $72, $1b, $e0, $a8, $4a, $d6, $60, $c4, $72, $c1, $f3);
  key: THash256 =
    ($ec, $5d, $16, $82, $18, $39, $05, $61, $76, $d1, $7d, $b8, $37, $37, $8f, $c5, $78, $75, $aa, $e1, $70, $e3, $36, $52, $12, $c2, $ca, $9a, $a7, $e1, $c5, $5e);
var
  a: TAESCBC;
begin
  a:=TAESCBC.Create(key);
  try
    a.IV:=iv;
    edit3.Text:=a.DecryptPKCS7(Base64ToBin(Edit1.Text),false);
  finally
    a.free;
  end;
end;
Leguron commented 7 years ago

Yeah an option to turn for example all kissmanga booksmarks into bato.to would be nice.

yuushin51 commented 7 years ago

There is more website that's worth the hassle than kissmanga. I personally never use kissmanga, I often use batoto or mangatraders.

Because Batoto often delete manga chapters for a lot of reason, and it's annoying that I will never know until I do a manual check for my bookmarks maybe once a year.

kavin-90 commented 7 years ago

@riderkick i got key from Cryptojs reading how key is generated then i researched how to use them to decode the text i.e wrapka function.

key is defined in reader and overridden cyptojs key and always remain same.

@riderkick i decoded the key and iv key which is required for decryption i gonna install lazarus so @riderkick

where did u got the syncrypto library ?

riderkick commented 7 years ago

@kavin-90 the actual key is mshsdf832nsdbash20asdmnasdbasd612basd. SynCrypto is part of mORMot library https://github.com/synopse/mORMot. You just need SynCrypto.pas, SynCommon.pas, SyncFPCTypInfo.pas, SynLZ.pas, Synopse.inc, SynopseCommit.inc I will use DCPCrypt instead, because SynCrypto is too big, mostly the required unit SynCommon.pas. DCPCrypt is available in Lazarus-CCR.

kavin-90 commented 7 years ago

i got DCPCrypt but docs only available for encryption on Lazarus wiki

I checked on some series it didn't override key but extend key or maybe they changed key again

Verified they removed overriding key and now only using extending key.

Now new key is 0a8cafd4f6a0345bdcbe328e90f4f8e4afd8a6c35a79d6143f450e700b31a5bf

old one is removed because it was overriding above key.

@riderkick your example encrypted text didn't work with Cryptojs so obv. it will not work with php too.

how to added that cryptojs zip file to github?

cryptojs-to-php.zip.txt

riderkick commented 7 years ago

@kavin-90 please test.

kavin-90 commented 7 years ago

Okay. but still i think u use wrong key.

@riderkick in my that zip there is key how they setup and my decryption code

riderkick commented 7 years ago

Obviously git pull

kavin-90 commented 7 years ago

@riderkick working correctly.

riderkick commented 7 years ago

Just test with your browser, open console/inspect in the working kissmanga reader page.

CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(chko)) result "0a8cafd4f6a0345bdcbe328e90f4f8e4afd8a6c35a79d6143f450e700b31a5bf"

CryptoJS.enc.Hex.stringify(key) result "0a8cafd4f6a0345bdcbe328e90f4f8e4afd8a6c35a79d6143f450e700b31a5bf"

chko result "mshsdf832nsdbash20asdmnasdbasd612basd"

first chko is _0x331e[21] which is mshsdf832nsdbash20asdm And this piece of code:

var _0x2c7e = "nasdbasd612basd"; 
chko = chko + _0x2c7e[0];
key = CryptoJS.SHA256(chko);

so the key before hashed with sha256 is mshsdf832nsdbash20asdm + nasdbasd612basd = mshsdf832nsdbash20asdmnasdbasd612basd

Just test by yourself. button3 and button4. project1.exe.txt

kavin-90 commented 7 years ago

@riderkick it working correctly download chapter of Deadman wonderland no problem at all.

yuushin51 commented 7 years ago

@kavin-90 Is there any special setting for this to work now? cause it's still not downloading for me, it's stuck at downloading state and 0bps speed I tried downloading a chapter of deadman wonderland too but it's the same

kavin-90 commented 7 years ago

@yuushin51 i'm checking it again maybe network issue that why it give 0bps speed.

edit: Checked working correctly no problem so maybe you're facing network issue on kissmanga

yuushin51 commented 7 years ago

@kavin-90 Batoto is downloading fine, and I can read kissmanga on browser normally

kavin-90 commented 7 years ago

hmm, what i can tell is that there is no problem with fmd to download from kissmanga let me check my settings.

  1. Number of Download Task on same time = 1
  2. Number of Download Filter per task = 1
  3. Number of retries = 5
  4. Connection timeout = 30
yuushin51 commented 7 years ago

@kavin-90 it's not working, the task failed after 5 retries I'm thinking maybe try changing your IP and see if it still works?

riderkick commented 7 years ago

You can try handycache, set proxy on fmd to handycache listen address:port. There you can see the live status of your connections.

R-Jimenez commented 7 years ago

Same settings as @kavin-90, still no downloads. Could be our IP is still blocked?

Leguron commented 7 years ago

riderkick can you do a guide on how to work with handycache? I still can't download from kissmanga.

IgnatiusC commented 7 years ago

Tried to figure out handycache, not sure if I did it right but here's the log I got: http://pastebin.com/DRZKjgTS And FMD log: http://pastebin.com/Q9wUrCqQ

yuushin51 commented 7 years ago

@riderkick some manga would run of out of retry limit and fail, some manga would just fail immediately http://pastebin.com/38tU9piX <- retry http://pastebin.com/hZVz0n1R <- no retry

riderkick commented 7 years ago

~Seems like they change the encryption~, they may watching this thread.

riderkick commented 7 years ago

@IgnatiusC, @yuushin51 from your log it's clearly the url not decrypted yet. Are you running the old download task? Try to re-add the download task. because its record the previous image url which is invalid.

riderkick commented 7 years ago

screen

IgnatiusC commented 7 years ago

Looks like KissManga just went down but I'll give it a try when they are back up.

yuushin51 commented 7 years ago

@riderkick yes I added new download, many times, still the same btw kissmanga is now closed to upgrade server, probably gonna take 2 hours, it says. will make a gif when it's up

kavin-90 commented 7 years ago

before downloading chapter FMD manga info showed me 2-3 time please wait after that works no problem ahahhahahaa.