Jump to content

Is it possible to work with Mega.co.nz and AutoIT


Recommended Posts

I was wondering if its possible to make anything like this in AutoIT

 

function toArr(str)
{
    var ret = Array((str.length + 3) >> 2);

    // String to array of 32 bit ints
    for (var i = 0; i < str.length; i += 4)
    {
        // FYI:
        // NaN << x === 0
        // x | NaN === x
        ret[i >> 2] =
            (str.charCodeAt(i  ) << 24) |
            (str.charCodeAt(i+1) << 16) |
            (str.charCodeAt(i+2) <<  8) |
             str.charCodeAt(i+3);
    }
    return ret;
}

function megaKdf(pw)
{
    var pwkey = [0x93c467e3, 0x7db0c7a4, 0xd1be3f81, 0x0152cb56];
    var arrPw = toArr(pw);
    var aes   = Array((arrPw + 3) >> 2);

    // Init aes keys
    for (var i = 0; i < arrPw.length; i += 4)
    {
        aes[i >> 2] = new sjcl.cipher.aes([arrPw[i]|0, arrPw[i+1]|0, arrPw[i+2]|0, arrPw[i+3]|0]);
    }

    // Generate password key
    for (var i = 0; i < 65536; i++)
    {
        for (var j = 0; j < aes.length; j++)
        {
            pwkey = aes[j].encrypt(pwkey);
        }
    }

    return pwkey;
}

function loginHash(pwKey, email)
{
    var aes = new sjcl.cipher.aes(pwKey);
    var arrEmail = toArr(email);
    var hash = [0, 0, 0, 0];

    // Compress email with xor
    for (var i = 0; i < arrEmail.length; i++)
    {
        hash[i & 3] ^= arrEmail[i];
    }

    // Generate hash
    for (var i = 0; i < 16384; i++)
    {
        hash = aes.encrypt(hash);
    }

    return sjcl.codec.base64.fromBits([hash[0], hash[2]], true, true);
}

function badRand32()
{
    return Math.floor(0x100000000 * Math.random());
}

function generateMasterKey()
{
    return [badRand32(), badRand32(), badRand32(), badRand32()];
}

function confirmationLinkHash(pwKey)
{
    var aes = new sjcl.cipher.aes(pwKey);
    return aes.encrypt([badRand32(), 0, 0, badRand32()]);
}

function updateHashes(email, pw)
{
    var pwKey = megaKdf(pw);
    var masterKey = generateMasterKey();
    var clHash = confirmationLinkHash(pwKey, masterKey);
    var lHash = loginHash(pwKey, email);
    var aes = new sjcl.cipher.aes(pwKey);

    return lHash;
}

function htmlentities(str)
{
    return str.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#39;");
}

function analyzeLink(link, pw)
{
    var linkHex      = "N/A";
    var masterKey    = "N/A";
    var encMasterKey = "N/A";
    var pwHash       = "N/A";
    var unknown      = "N/A";
    var email        = "N/A";
    var spacer       = "N/A";
    var name         = "N/A";
    var unknown2     = "N/A";

    if (link.substr(0, 27) == "https://mega.co.nz/#confirm")
    {
        link = link.substr(27);
    }
    if (link.substr(0, 19) == "mega.co.nz/#confirm")
    {
        link = link.substr(19);
    }
    if (link.substr(0, 8) == "#confirm")
    {
        link = link.substr(8);
    }
    if (link.search(/^[0-9A-Za-z\-_]*$/) == 0)
    {
        link = sjcl.codec.hex.fromBits(sjcl.codec.base64.toBits(link, true));

        var pos;
        for (pos = 94; pos < link.length; pos += 2)
        {
            if (link.substr(pos, 2) == "09")
            {
                break;
            }
        }
        if (pos < link.length)
        {
            var pwKey = megaKdf(pw);
            var aes = new sjcl.cipher.aes(pwKey);
            var linkHash = aes.decrypt(sjcl.codec.hex.toBits(link.substr(32, 32)));
            if (linkHash[1] == 0 && linkHash[2] == 0)
            {
                masterKey = (new sjcl.cipher.aes(pwKey)).decrypt(sjcl.codec.hex.toBits(link.substr(0, 32)));
                masterKey = 'Base64: <span style="color:#f00; font-family:monospace;">' + sjcl.codec.base64.fromBits(masterKey, true, true) + '</span> (hex: <span style="color:#f00; font-family:monospace;">' + sjcl.codec.hex.fromBits(masterKey) + '</span>)';
            }
            else if (pw != "")
            {
                masterKey = "Wrong password";
            }
            encMasterKey = '<span style="color:#f00; font-family:monospace;">' + link.substr( 0, 32) + '</span>';
            pwHash       = '<span style="color:#080; font-family:monospace;">' + link.substr(32, 32) + '</span>';
            unknown      = '<span style="color:#00f; font-family:monospace;">' + link.substr(64, 30) + '</span>';
            email        = link.substr(94, pos - 94);
            spacer       = '<span style="color:#0cc; font-family:monospace;">09</span>';
            name         = link.substr(pos + 2, link.length - 16 - pos - 2);
            unknown2     = '<span style="color:#000; font-family:monospace;">' + link.substr(link.length - 16) + '</span>';
            linkHex = '<span style="font-family:monospace;">' + encMasterKey + " " + pwHash + " " + unknown +
                ' <span style="color:#888; font-family:monospace;">' + email + '</span> ' + spacer +
                ' <span style="color:#f0f; font-family:monospace;">' + name + '</span> ' + unknown2 + '</span>';
            email = htmlentities(sjcl.codec.utf8String.fromBits(sjcl.codec.hex.toBits(email))) + ' (<span style="color:#888; font-family:monospace;">' + email + '</span>)';
            name  = htmlentities(sjcl.codec.utf8String.fromBits(sjcl.codec.hex.toBits(name)))  + ' (<span style="color:#f0f; font-family:monospace;">' + name  + '</span>)';
        }
    }
    ge("linkHex").innerHTML          = linkHex;
    ge("linkMasterKey").innerHTML    = masterKey;
    ge("linkEncMasterKey").innerHTML = encMasterKey;
    ge("linkPwHash").innerHTML       = pwHash;
    ge("linkUnknown").innerHTML      = unknown;
    ge("linkEmail").innerHTML        = email;
    ge("linkSpacer").innerHTML       = spacer;
    ge("linkName").innerHTML         = name;
    ge("linkUnknown2").innerHTML     = unknown2;
}

 

Edited by RyukShini
Link to post
Share on other sites

Not being too familiar with the Javascript language reference, I don't know what some of the functions are doing (like how the comma separated values are handled/fed to the AES func...but it looks plausible.  As far as the HTML rendering, you'd have to embed some sort of browser/renderer unless you can afford to use other UI means/elements.

Link to post
Share on other sites

@RyukShini,

it would be wiser not to try to translate the code, but to describe the task, and then try to implement it in AutoIt. then, if you need help with your AutoIt script, you can ask the forum.

but when you are asking AutoIt forum members to read and understand an enigmatic and lengthy piece of code written in another language, it is not surprising you have not yet got any help.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Zaoka
      HI,
      for couple of years I'm using  Jos script for sending reports, email with excel attachment. But from last week i'm getting this error when sending excel or word attachment
      message has lines too long for transport jpeg, pdf works with no problems, any sugestion ?
    • By diepfeile
      I'm using the following:
      Autoit 3.3.14.5
      newly installed Beta 3.3.15.5
      SQlite version 3380000 aka 3.38.0
      I put sqlite3.dll and sqlite3_x64.dll in C:\Windows\System32 since many scripts depend on them.


      I extended the output of _SQLite_Startup()
      with:
      ConsoleWrite("@AutoItX64 " & @AutoItX64 & @CRLF) ConsoleWrite("$sDll_Filename " & $sDll_Filename & @CRLF) ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF)

      Also using the script from https://www.autoitscript.com/autoit3/docs/libfunctions/_SQLite_Startup.htm for testing.

       
      >Running:(3.3.14.5):C:\Program Files (x86)\AutoIt3\autoit3.exe "R:\Download\aasdf.au3" @AutoItX64 0 $sDll_Filename sqlite3.dll _SQLite_LibVersion=0 >Running:(3.3.14.5):C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "R:\Download\aasdf.au3" @AutoItX64 1 $sDll_Filename sqlite3_x64.dll _SQLite_LibVersion=3.38.0 >Running:(3.3.15.5):C:\Program Files (x86)\AutoIt3\Beta\autoit3.exe "R:\Download\aasdf.au3" @AutoItX64 0 $sDll_Filename sqlite3.dll _SQLite_LibVersion=0 >Running:(3.3.15.5):C:\Program Files (x86)\AutoIt3\Beta\autoit3_x64.exe "R:\Download\aasdf.au3" @AutoItX64 1 $sDll_Filename sqlite3_x64.dll _SQLite_LibVersion=3.38.0


      Why doesn't it work in 32bit, despite me having the 32bit sqlite.dll? Autoit urges running scripts in 32bit mode and Scite starts scripts just in 32bit mode without the flag?
      With #AutoIt3Wrapper_UseX64=Y it just works, both normal Autoit and beta!
      sqlite3.dll sqlite3_x64.dll
    • By Iraj
      Hello Team, Greetings!
      Is there any way to run any 3rd party application silently in background without the GUI getting in the front ?
      I was implementing angry-ip scanner with autoit & wanted the angry-ip application to run in background quietly as I am copying its output to other file on completion. is there any way to achieve my query?
      Below is code I tried: 
      $range = "192.168.0.1 192.168.0.255" ShellExecuteWait("C:\Windows\DDM\ipscan.exe","-f:range "&$iprange&" -q -o C:\temp\ScanResults.csv","","open",@SW_HIDE) Thanks!
    • By PeterVerbeek
      This topic give you access to an AutoIt functions library I maintain which is called PAL, Peter's AutoIt Library. The latest version 1.26 contains 214 functions divided into these topics:
      window, desktop and monitor GUI, mouse and color GUI controls including graphical buttons (jpg, png) logics and mathematics include constants string, xml string and file string dialogues and progress bars data lists: lists, stacks, shift registers and key maps (a.ka. dictionaries) miscellaneous: logging/debugging, process and system info Change log and files section  on the PAL website (SourceForge).
      A lot of these functions were created in the development of Peace, Peter's Equalizer APO Configuration Extension, which is a user interface for the system-wide audio driver called Equalizer APO.
    • By Hermes
      Hi, I am struggling in setting the value of a textarea based on the value of clipboard (that contains a long web page source codes). If I use _WD_SetElementValue, it freezes after some time, or appears to be pressing tab and goes out of focus. I can also use send keys but i need the script to run in the background.
      Here is the full script:
      #Include "Chrome.au3" #Include "wd_core.au3" #Include "wd_helper.au3" #Include "WinHttp.au3" #include <MsgBoxConstants.au3> #include <WinAPIFiles.au3> #include <Array.au3> #include <AutoItConstants.au3> #include <WinAPIFiles.au3> #include <GDIPlus.au3> #include <Excel.au3> Local $sDesiredCapabilities, $sSession SetupChrome() _WD_Startup() $sSession = _WD_CreateSession($sDesiredCapabilities) _WD_LoadWait($sSession) _WD_Navigate($sSession, "http://demo.borland.com/testsite/stadyn_largepagewithimages.html") _WD_LoadWait($sSession) Global $sSource = _WD_GetSource($sSession) Local $Paste = ClipPut($sSource) Local $sData = ClipGet() Local $aArray = 0, _ $iOffset = 1 While 1 $aArray = StringRegExp($sData, '(?s)<p>.*</p>', $STR_REGEXPARRAYMATCH, $iOffset) If @error Then ExitLoop $iOffset = @extended For $i = 0 To UBound($aArray) - 1 Local $Paste = ClipPut($aArray[$i]) Local $sRegExData = ClipGet() ;MsgBox(0, "", "$sRegExData = " & $sRegExData) Next WEnd _WD_Navigate($sSession, "https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_textarea_placeholder") _WD_WaitElement($sSession, $_WD_LOCATOR_ByCSSSelector, "iframe#iframeResult") Local $sElement1 = _WD_FindElement($sSession, $_WD_LOCATOR_ByCSSSelector, "iframe#iframeResult") _WD_FrameEnter($sSession, $sElement1) _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//html/body/textarea") $textarea = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//html/body/textarea") _WD_ElementAction($sSession, $textarea, 'click') ;WD SetElementValue(SsSession, Stextarea, $sRegExData) <-- I can do this but the focus goes out, or the browser freezes _WD_FrameLeave($sSession) sleep(2000) Send("^v") _WD_LoadWait($sSession) _WD_Shutdown() Func SetupChrome() _WD_Option('Driver', 'chromedriver.exe') _WD_Option('Port', 9515) _WD_Option('DriverParams', '--log-path="' & @ScriptDir & '\chrome.log"') $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"goog:chromeOptions": {"w3c": true, "args":["start-maximized","disable-infobars"]}}}}' EndFunc ;==>SetupChrome Can someone help me please, or re-direct me to the right path? TIA!
×
×
  • Create New...