Jump to content
UBot Underground

Recommended Posts

Hello all,

 

I stumbled across a Javascript code last week which might help me in what I'm doing now, however, I have had hard times to use the same in bot I'm working with -- mainly because I had no experience with handling the Javascript code, except using simple JS code to scroll or refresh the page. I'm aware that I need to pass certain scraped parameters from the image I wish to apply JS on, but regardless of many attempts I couldn't get it done. I'm pasting the JS code and the code from the page which I'd like to run JS.

// VERSION: 2.3 LAST UPDATE: 11.07.2013
/*
* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
*
* Made by Wilq32, wilq32@gmail.com, Wroclaw, Poland, 01.2009
* Website: http://code.google.com/p/jqueryrotate/
*/

(function($) {
    var supportedCSS,supportedCSSOrigin, styles=document.getElementsByTagName("head")[0].style,toCheck="transformProperty WebkitTransform OTransform msTransform MozTransform".split(" ");
    for (var a = 0; a < toCheck.length; a++) if (styles[toCheck[a]] !== undefined) { supportedCSS = toCheck[a]; }
    if (supportedCSS) {
      supportedCSSOrigin = supportedCSS.replace(/[tT]ransform/,"TransformOrigin");
      if (supportedCSSOrigin[0] == "T") supportedCSSOrigin[0] = "t";
    }

    // Bad eval to preven google closure to remove it from code o_O
    eval('IE = "v"=="\v"');

    jQuery.fn.extend({
      rotate:function(parameters)
      {
      if (this.length===0||typeof parameters=="undefined") return;
      if (typeof parameters=="number") parameters={angle:parameters};
      var returned=[];
      for (var i=0,i0=this.length;i<i0;i++)
      {
      var element=this.get(i);    
      if (!element.Wilq32 || !element.Wilq32.PhotoEffect) {

            var paramClone = $.extend(true, {}, parameters);
            var newRotObject = new Wilq32.PhotoEffect(element,paramClone)._rootObj;

            returned.push($(newRotObject));
      }
      else {
            element.Wilq32.PhotoEffect._handleRotation(parameters);
      }
      }
      return returned;
      },
      getRotateAngle: function(){
      var ret = [];
      for (var i=0,i0=this.length;i<i0;i++)
      {
      var element=this.get(i);    
      if (element.Wilq32 && element.Wilq32.PhotoEffect) {
            ret[i] = element.Wilq32.PhotoEffect._angle;
      }
      }
      return ret;
      },
      stopRotate: function(){
      for (var i=0,i0=this.length;i<i0;i++)
      {
      var element=this.get(i);    
      if (element.Wilq32 && element.Wilq32.PhotoEffect) {
            clearTimeout(element.Wilq32.PhotoEffect._timer);
      }
      }
      }
    });

    // Library agnostic interface

    Wilq32=window.Wilq32||{};
    Wilq32.PhotoEffect=(function(){

      if (supportedCSS) {
      return function(img,parameters){
      img.Wilq32 = {
      PhotoEffect: this
      };

      this._img = this._rootObj = this._eventObj = img;
      this._handleRotation(parameters);
      }
      } else {
      return function(img,parameters) {
      this._img = img;
      this._onLoadDelegate = [parameters];

      this._rootObj=document.createElement('span');
      this._rootObj.style.display="inline-block";
      this._rootObj.Wilq32 =
      {
            PhotoEffect: this
      };
      img.parentNode.insertBefore(this._rootObj,img);

      if (img.complete) {
      this._Loader();
      } else {
      var self=this;
      // TODO: Remove jQuery dependency
      jQuery(this._img).bind("load", function(){ self._Loader(); });
      }
      }
      }
    })();

    Wilq32.PhotoEffect.prototype = {
      _setupParameters : function (parameters){
      this._parameters = this._parameters || {};
      if (typeof this._angle !== "number") { this._angle = 0 ; }
      if (typeof parameters.angle==="number") { this._angle = parameters.angle; }
      this._parameters.animateTo = (typeof parameters.animateTo === "number") ? (parameters.animateTo) : (this._angle);

      this._parameters.step = parameters.step || this._parameters.step || null;
      this._parameters.easing = parameters.easing || this._parameters.easing || this._defaultEasing;
      this._parameters.duration = parameters.duration || this._parameters.duration || 1000;
      this._parameters.callback = parameters.callback || this._parameters.callback || this._emptyFunction;
      this._parameters.center = parameters.center || this._parameters.center || ["50%","50%"];
      if (typeof this._parameters.center[0] == "string") {
      this._rotationCenterX = (parseInt(this._parameters.center[0],10) / 100) * this._imgWidth * this._aspectW;
      } else {
      this._rotationCenterX = this._parameters.center[0];
      }
      if (typeof this._parameters.center[1] == "string") {
      this._rotationCenterY = (parseInt(this._parameters.center[1],10) / 100) * this._imgHeight * this._aspectH;
      } else {
      this._rotationCenterY = this._parameters.center[1];
      }

      if (parameters.bind && parameters.bind != this._parameters.bind) { this._BindEvents(parameters.bind); }
      },
      _emptyFunction: function(){},
      _defaultEasing: function (x, t, b, c, d) { return -c * ((t=t/d-1)*t*t*t - 1) + b },
      _handleRotation : function(parameters, dontcheck){
      if (!supportedCSS && !this._img.complete && !dontcheck) {
      this._onLoadDelegate.push(parameters);
      return;
      }
      this._setupParameters(parameters);
      if (this._angle==this._parameters.animateTo) {
      this._rotate(this._angle);
      }
      else {
      this._animateStart();      
      }
      },

      _BindEvents:function(events){
      if (events && this._eventObj)
      {
      // Unbinding previous Events
      if (this._parameters.bind){
      var oldEvents = this._parameters.bind;
      for (var a in oldEvents) if (oldEvents.hasOwnProperty(a))
            // TODO: Remove jQuery dependency
            jQuery(this._eventObj).unbind(a,oldEvents[a]);
      }

      this._parameters.bind = events;
      for (var a in events) if (events.hasOwnProperty(a))
      // TODO: Remove jQuery dependency
      jQuery(this._eventObj).bind(a,events[a]);
      }
      },

      _Loader:(function()
      {
      if (IE)
      return function() {
      var width=this._img.width;
      var height=this._img.height;
      this._imgWidth = width;
      this._imgHeight = height;
      this._img.parentNode.removeChild(this._img);

      this._vimage = this.createVMLNode('image');
      this._vimage.src=this._img.src;
      this._vimage.style.height=height+"px";
      this._vimage.style.width=width+"px";
      this._vimage.style.position="absolute"; // FIXES IE PROBLEM - its only rendered if its on absolute position!
      this._vimage.style.top = "0px";
      this._vimage.style.left = "0px";
      this._aspectW = this._aspectH = 1;

      /* Group minifying a small 1px precision problem when rotating object */
      this._container = this.createVMLNode('group');
      this._container.style.width=width;
      this._container.style.height=height;
      this._container.style.position="absolute";
      this._container.style.top="0px";
      this._container.style.left="0px";
      this._container.setAttribute('coordsize',width-1+','+(height-1)); // This -1, -1 trying to fix ugly problem with small displacement on IE
      this._container.appendChild(this._vimage);

      this._rootObj.appendChild(this._container);
      this._rootObj.style.position="relative"; // FIXES IE PROBLEM
      this._rootObj.style.width=width+"px";
      this._rootObj.style.height=height+"px";
      this._rootObj.setAttribute('id',this._img.getAttribute('id'));
      this._rootObj.className=this._img.className;            
      this._eventObj = this._rootObj;    
      var parameters;
      while (parameters = this._onLoadDelegate.shift()) {
            this._handleRotation(parameters, true);    
      }
      }
      else return function () {
      this._rootObj.setAttribute('id',this._img.getAttribute('id'));
      this._rootObj.className=this._img.className;

      this._imgWidth=this._img.naturalWidth;
      this._imgHeight=this._img.naturalHeight;
      var _widthMax=Math.sqrt((this._imgHeight)*(this._imgHeight) + (this._imgWidth) * (this._imgWidth));
      this._width = _widthMax * 3;
      this._height = _widthMax * 3;

      this._aspectW = this._img.offsetWidth/this._img.naturalWidth;
      this._aspectH = this._img.offsetHeight/this._img.naturalHeight;

      this._img.parentNode.removeChild(this._img);    

      this._canvas=document.createElement('canvas');
      this._canvas.setAttribute('width',this._width);
      this._canvas.style.position="relative";
      this._canvas.style.left = -this._img.height * this._aspectW + "px";
      this._canvas.style.top = -this._img.width * this._aspectH + "px";
      this._canvas.Wilq32 = this._rootObj.Wilq32;

      this._rootObj.appendChild(this._canvas);
      this._rootObj.style.width=this._img.width*this._aspectW+"px";
      this._rootObj.style.height=this._img.height*this._aspectH+"px";
      this._eventObj = this._canvas;

      this._cnv=this._canvas.getContext('2d');
      var parameters;
      while (parameters = this._onLoadDelegate.shift()) {
            this._handleRotation(parameters, true);    
      }
      }
      })(),

      _animateStart:function()
      {    
      if (this._timer) {
      clearTimeout(this._timer);
      }
      this._animateStartTime = +new Date;
      this._animateStartAngle = this._angle;
      this._animate();
      },
      _animate:function()
      {
      var actualTime = +new Date;
      var checkEnd = actualTime - this._animateStartTime > this._parameters.duration;

      // TODO: Bug for animatedGif for static rotation ? (to test)
      if (checkEnd && !this._parameters.animatedGif)
      {
      clearTimeout(this._timer);
      }
      else
      {
      if (this._canvas||this._vimage||this._img) {
      var angle = this._parameters.easing(0, actualTime - this._animateStartTime, this._animateStartAngle, this._parameters.animateTo - this._animateStartAngle, this._parameters.duration);
      this._rotate((~~(angle*10))/10);
      }
      if (this._parameters.step) {
      this._parameters.step(this._angle);
      }
      var self = this;
      this._timer = setTimeout(function()
      {
      self._animate.call(self);
      }, 10);
      }

      // To fix Bug that prevents using recursive function in callback I moved this function to back
      if (this._parameters.callback && checkEnd){
      this._angle = this._parameters.animateTo;
      this._rotate(this._angle);
      this._parameters.callback.call(this._rootObj);
      }
      },

      _rotate : (function()
      {
      var rad = Math.PI/180;
      if (IE)
      return function(angle)
      {
      this._angle = angle;
      this._container.style.rotation=(angle%360)+"deg";
      this._vimage.style.top = -(this._rotationCenterY - this._imgHeight/2) + "px";
      this._vimage.style.left = -(this._rotationCenterX - this._imgWidth/2) + "px";
      this._container.style.top = this._rotationCenterY - this._imgHeight/2 + "px";
      this._container.style.left = this._rotationCenterX - this._imgWidth/2 + "px";

      }
      else if (supportedCSS)
      return function(angle){
      this._angle = angle;
      this._img.style[supportedCSS]="rotate("+(angle%360)+"deg)";
      this._img.style[supportedCSSOrigin]=this._parameters.center.join(" ");
      }
      else
      return function(angle)
      {
      this._angle = angle;
      angle=(angle%360)* rad;
      // clear canvas    
      this._canvas.width = this._width;//+this._widthAdd;
      this._canvas.height = this._height;//+this._heightAdd;

      // REMEMBER: all drawings are read from backwards.. so first function is translate, then rotate, then translate, translate..
      this._cnv.translate(this._imgWidth*this._aspectW,this._imgHeight*this._aspectH);    // at least center image on screen
      this._cnv.translate(this._rotationCenterX,this._rotationCenterY);            // we move image back to its orginal
      this._cnv.rotate(angle);                        // rotate image
      this._cnv.translate(-this._rotationCenterX,-this._rotationCenterY);        // move image to its center, so we can rotate around its center
      this._cnv.scale(this._aspectW,this._aspectH); // SCALE - if needed 
      this._cnv.drawImage(this._img, 0, 0);                        // First - we draw image
      }

      })()
      }

      if (IE)
      {
      Wilq32.PhotoEffect.prototype.createVMLNode=(function(){
      document.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)");
      try {
      !document.namespaces.rvml && document.namespaces.add("rvml", "urn:schemas-microsoft-com:vml");
      return function (tagName) {
            return document.createElement('<rvml:' + tagName + ' class="rvml">');
      };
      } catch (e) {
      return function (tagName) {
            return document.createElement('<' + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');
      };
      }        
      })();
      }

})(jQuery);

Scraped image element (uBOT)

<a onclick="rotateImage('images0');"><img id="images0" src="../tmpc65821453/45ee090ad71f8f89cf85b3f826ab561c_1579084879.jpg"></a>

Screenshot of the same image --> https://prnt.sc/qnz0xa

 

If I need to provide something else, please let me know.

 

 

P.S. Some of you might know what I'm trying to do and where! :)

 

 

Any help is appreciated!
 

Link to post
Share on other sites

Hi,

 

You can download/copy paste jquery into the "run javascript" command then do the same for your code.

 

Regards,

Nick

Hi, Nick. Thanks for replying.

 

I'm not sure if I understood what you want me to do?

 

Basically, above JS code is used in the site on which I'm trying to break this captcha. The JS rotate the images on a random base (i.e. https://prnt.sc/qnz0xa)and I need a way to somehow reset the images to its original state so I can pass the captcha. As I can see each image is temporarily generated and it retain the same link regardless how may times you refresh it.

 

This is how it looks like when you don't click, when the captcha image is loaded:

<a onclick="rotateImage('images0');"><img id="images0" src="../tmpc65821453/9c067dae9a3ad64b9a89ac6f5653a695_1579144077.jpg"></a>

This is how it looks like when you click it once:

<a onclick="rotateImage('images0');"><img id="images01" src="../tmpc65821453/9c067dae9a3ad64b9a89ac6f5653a695_1579144077.jpg" style="transform: rotate(90deg);"></a>

(full URL to generate image from the above example: https://bit.ly/2Tz9nKi)

 

Each click it gets increment by 90deg up to 360 of course, then it resets to 0deg. I can't find the particular function "rotateImage" anywhere on their site.

 

 

I hope it helps a bit now.

 

Regards,

M

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...