Malware Insights
This PDF document contains multiple embedded JavaScript streams, several of which are related to form field calculations and date formatting. One script, javascript_obj0938_010.js, appears to be a custom date calculation function, and another, javascript_obj0939_011.js, is a more extensive date parsing utility from practicalpdf.com. While these scripts themselves are not overtly malicious, their presence in a PDF, combined with the 'PDF_JAVASCRIPT' and 'PDF_JS' heuristic firings, suggests an attempt to create interactive elements that could be used for phishing or to obscure malicious activity. The URL http://try67.blogspot.com is mentioned in the script comments, and http://practicalpdf.com is also referenced.
Machine Learning
- Nyx PDF Classifier clean score 0.0780
Heuristics 5
-
JavaScript action low 1 related finding PDF_JAVASCRIPTPDF contains a /JavaScript action. Generic JavaScript is common in benign forms; specific dangerous APIs are scored by separate rules.
-
Embedded JS stream low PDF_JSPDF references a /JS stream. Generic JavaScript is common in benign forms; specific dangerous APIs are scored by separate rules.
-
AcroForm button with action trigger low PDF_ACROFORM_BUTTONPDF contains a /Btn form field together with a SubmitForm/URI/Launch/JS trigger — this is the building block of fake 'Download' or 'Open' button overlays used in PDF phishing lures
-
Object number defined twice with different bodies info PDF_DUPLICATE_OBJ_BODY_INCREMENTALThe same indirect object (N G) is defined more than once with different body bytes. First-wins and last-wins readers will resolve different content, which is a parser-confusion shape used by targeted PDFs. Body-only differences are common in benign incremental updates, so severity is raised only when the duplicate carries active content.
-
Embedded URL info EMBEDDED_URLOne or more URLs were extracted from the document. The URL itself is not a detection — see the per-URL labels for which channel (macro, JS, link annotation, document body, ...) reached each URL.URL http://practicalpdf.com Referenced by PDF JavaScript
- http://www.w3.org/1999/02/22-rdf-syntax-ns#In PDF document text
- http://ns.adobe.com/xap/1.0/In PDF document text
- http://ns.adobe.com/xap/1.0/mm/In PDF document text
- http://purl.org/dc/elements/1.1/In PDF document text
- http://ns.adobe.com/pdf/1.3/In PDF document text
- http://ns.adobe.com/pdfx/1.3/In PDF document text
- http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/In PDF document text
- http://try67.blogspot.comReferenced by PDF JavaScript
- http://www.iec.chIn PDF document text
Extracted artifacts 13
Files carved from inside the sample during analysis.
| Filename | Kind | Source | Size |
|---|---|---|---|
javascript_obj1232_002.js |
pdf-javascript-stream | PDF /JS object 1232 at offset 0x55989 | 139 bytes |
SHA-256: ff2c41141943c5e3655f4a5a712cd73eb51d613b5d815cf2562abf7d637b6604 |
|||
Preview scriptFirst 1,000 lines of the extracted script
AFSimple_Calculate("SUM", new Array ("Days 1", "Days 10", "Days 2", "Days 3", "Days 4", "Days 5", "Days 6", "Days 7", "Days 8", "Days 9"));
|
|||
javascript_obj1233_003.js |
pdf-javascript-stream | PDF /JS object 1233 at offset 0x55A41 | 38 bytes |
SHA-256: ae95d6581723cae0c2c1e3044a60f6c91e032264799b53449cd6269e6993d7bc |
|||
Preview scriptFirst 1,000 lines of the extracted script
AFNumber_Format(0, 0, 0, 0, "", true); |
|||
javascript_obj1234_004.js |
pdf-javascript-stream | PDF /JS object 1234 at offset 0x55A92 | 41 bytes |
SHA-256: 617ef4da07d9bc9d4e06a2320fe0d4cbacd3d6c2cc82039cf4e79e7facf7545f |
|||
Preview scriptFirst 1,000 lines of the extracted script
AFNumber_Keystroke(0, 0, 0, 0, "", true); |
|||
javascript_obj1347_007.js |
pdf-javascript-stream | PDF /JS object 1347 at offset 0x5A617 | 33 bytes |
SHA-256: b49875e7a786cc7d62191be88c49afc7a7f53551d4ec30ddf24c3fd7583d7233 |
|||
Preview scriptFirst 1,000 lines of the extracted script
AFDate_KeystrokeEx("mm/dd/yyyy");
|
|||
javascript_obj0938_010.js |
pdf-javascript-stream | PDF /JS object 938 at offset 0x3A32F | 1522 bytes |
SHA-256: b99e68249337621f6509d9757e300813973bb7756f5adce7da6c19fa36c43b96 |
|||
Preview scriptFirst 1,000 lines of the extracted script
// SINGLE LICENSE. All Rights Reserved to Gilad Denneboom, 2018. Distribution without permission is not allowed.
// You can contact me at try6767@gmail.com or via my website: http://try67.blogspot.com
function calcDateDiff() {
event.value = "";
var dateFormat = "m/d/yyyy";
var rowNum = event.target.name.replace("Days ", "");
var startDateString = this.getField("From_"+rowNum).valueAsString;
var endDateString = this.getField("To_"+rowNum).valueAsString;
if (startDateString=="" || endDateString=="") return;
var startDate = util.scand(dateFormat, startDateString);
var endDate = util.scand(dateFormat, endDateString);
if (startDate==null || endDate==null) return;
startDate.setHours(0);
startDate.setMinutes(0);
startDate.setSeconds(0);
startDate.setMilliseconds(0);
endDate.setHours(0);
endDate.setMinutes(0);
endDate.setSeconds(0);
endDate.setMilliseconds(0);
if (startDate.getTime()>endDate.getTime()) return;
var ignoreWeekends = this.getField("Check "+rowNum).valueAsString!="Off";
var diffInDays = 0;
while (startDate.getTime()<=endDate.getTime()) {
if (ignoreWeekends==false || (ignoreWeekends && startDate.getDay()!=0 && startDate.getDay()!=6)) {
diffInDays++;
}
startDate.setDate(startDate.getDate()+1);
}
event.value = diffInDays;
}
// SINGLE LICENSE. All Rights Reserved to Gilad Denneboom, 2018. Distribution without permission is not allowed.
// You can contact me at try6767@gmail.com or via my website: http://try67.blogspot.com
|
|||
javascript_obj0939_011.js |
pdf-javascript-stream | PDF /JS object 939 at offset 0x3A5AE | 6898 bytes |
SHA-256: 2848aca1b3997166e1bc293459e25f11002bd6e1b2e8d1d048640e5189f8a3e7 |
|||
Preview scriptFirst 1,000 lines of the extracted script
/*function PPDF_parseDateString(a,b){for(var d,e,c=/m+|d+|y+|H+|h+|M+|s+|t+|j+|\./g,f=[];e=c.exec(a);)f.push({match:e[0],startIndex:e.index,endIndex:e.index+e[0].length});if(d=f[0].startIndex>0?a.substring(0,f[0].startIndex):"",f.length>0)for(var g=0;g<f.length;g++){var h=f[g].match,i="";switch(h){case"mmmm":i=monthNames[b.getMonth()];break;case"mmm":i=monthNames[b.getMonth()].substr(0,3);break;case"mm":i=PPDF_pad(b.getMonth()+1,2);break;case"m":i=(b.getMonth()+1).toString();break;case"dddd":i=dayNames[b.getDay()];break;case"ddd":i=dayNames[b.getDay()].substr(0,3);break;case"dd":i=PPDF_pad(b.getDate(),2);break;case"d":i=b.getDate().toString();break;case"yyyy":i=b.getFullYear().toString();break;case"yy":i=b.getFullYear().toString().substring(2);break;case"HH":i=PPDF_pad(b.getHours(),2);break;case"H":i=b.getHours().toString();break;case"hh":var j=b.getHours();j>12&&(j-=12),i=PPDF_pad(j,2);break;case"h":j=b.getHours(),j>12&&(j-=12),i=j.toString();break;case"MM":i=PPDF_pad(b.getMinutes(),2);break;case"M":i=b.getMinutes().toString();break;case"ss":i=PPDF_pad(b.getSeconds(),2);break;case"s":i=b.getSeconds().toString();break;case"tt":i=b.getHours()>=12?"pm":"am";break;case"t":i=b.getHours()>=12?"p":"a"}var k="";g+1<f.length&&(k=a.substring(f[g].endIndex,f[g+1].startIndex)),d=d+i+k}return d}function PPDF_pad(a,b,c){return c=c||"0",a+="",a.length>=b?a:new Array(b-a.length+1).join(c)+a}console.println("** PPDF: Initializing DateExtended by practicalPDF (http://practicalpdf.com)");var nSecond=1e3,nMinute=60*nSecond,nHour=60*nMinute,nDay=24*nHour,nWeek=7*nDay,weekStartDay=0,monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"],dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];Object.defineProperty(Date,"PPDF_VERSION",{value:"1.1",writable:!1,enumerable:!0,configurable:!0}),Object.defineProperty(Date,"SHORT_DATE",{value:"m/d/yyyy",writable:!1,enumerable:!0,configurable:!0}),Object.defineProperty(Date,"LONG_DATE",{value:"dddd, mmmm dd, yyyy",writable:!1,enumerable:!0,configurable:!0}),Object.defineProperty(Date,"SHORT_TIME",{value:"h:MM tt",writable:!1,enumerable:!0,configurable:!0}),Object.defineProperty(Date,"LONG_TIME",{value:"h:MM:ss tt",writable:!1,enumerable:!0,configurable:!0}),Object.defineProperty(Date,"FULL_DATETIME",{value:"dddd, mmmm dd, yyyy h:MM:ss tt",writable:!1,enumerable:!0,configurable:!0}),Object.defineProperty(Date,"SORTABLE_DATETIME",{value:"yyyy-mm-dd HH:MM:ss",writable:!1,enumerable:!0,configurable:!0}),Object.defineProperty(Date,"MONTH_DAY",{value:"mmmm dd",writable:!1,enumerable:!0,configurable:!0}),Object.defineProperty(Date,"YEAR_MONTH",{value:"yyyy mmmm",writable:!1,enumerable:!0,configurable:!0}),Date.isLeapYear=function(a){return a%4===0&&a%100!==0||a%400===0},Date.daysBetween=function(a,b){var c=b.getTime()-a.getTime();return Math.abs(Math.round(c/nDay))},Date.getAge=function(b){var c=new Date,d=c.getFullYear()-b.getFullYear(),e=c.getMonth()-b.getMonth();return(e<0||0===e&&c.getDate()<b.getDate())&&(d-=1),d},Date.getAgeFromString=function(b){var c=new Date(Date.parse(b)),d=new Date,e=d.getFullYear()-c.getFullYear(),f=d.getMonth()-c.getMonth();return(f<0||0===f&&d.getDate()<c.getDate())&&(e-=1),e},Date.newFromString=function(a){return new Date(Date.parse(a))},Date.max=function(b){return new Date(Math.max.apply(null,b))},Date.min=function(b){return new Date(Math.min.apply(null,b))},Date.prototype.nextWeekDay=function(){var a;return this.reset(),this.getDay()<5&&(a=this.changeBy({days:1})),5==this.getDay()&&(a=this.changeBy({days:3})),6==this.getDay()&&(a=this.changeBy({days:2})),a},Date.prototype.nextMonth=function(a){return this.changeBy({months:1}),this.setDate(1),a&&"boolean"==typeof a&&1==a&&(6==this.getDay()&&this.changeBy({days:2}),0==this.getDay()&&this.changeBy({days:1})),this},Date.prototype.toFormattedString=function(a){return util.printd(a,this)},Date.prototype.reset=function(){return this.setHours(0),this.setMinutes(0),this.setSeconds(0),this.setMilliseconds(0),this},Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth())},Date.getDaysInMonth=function(a,b){return[31,Date.isLeapYear(a)?29:28,31,30,31,30,31,31,30,31,30,31][b]},Date.prototype.changeByMilliseconds=function(a){return this.setMilliseconds(this.getMilliseconds()+a),this},Date.prototype.changeBySeconds=function(a){return this.changeByMilliseconds(1e3*a)},Date.prototype.changeByMinutes=function(a){return this.changeByMilliseconds(6e4*a)},Date.prototype.changeByHours=function(a){return this.changeByMilliseconds(36e5*a)},Date.prototype.changeByDays=function(a){return this.changeByMilliseconds(864e5*a)},Date.prototype.changeByWeeks=function(a){return this.changeByMilliseconds(6048e5*a)},Date.prototype.changeByMonths=function(a){var b=this.getDate(),c=this.getHours(),d=this.getMinutes(),e=this.getSeconds();return this.setDate(1),this.setMonth(this.getMonth()+a),this.setDate(Math.min(b,this.getDaysInMonth())),this.setHours(c),this.setMinutes(d),this.setSeconds(e),this},Date.prototype.changeByYears=function(a){return this.changeByMonths(12*a)},Date.prototype.changeBy=function(a){return a.milliseconds&&this.changeByMilliseconds(a.milliseconds),a.seconds&&this.changeBySeconds(a.seconds),a.minutes&&this.changeByMinutes(a.minutes),a.hours&&this.changeByHours(a.hours),a.days&&this.changeByDays(a.days),a.weeks&&this.changeByWeeks(a.weeks),a.months&&this.changeByMonths(a.months),a.years&&this.changeByYears(a.years),this},Date.prototype.getDayOfYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/nDay)},Date.prototype.getWeekOfYear=function(a){var b,c=this.getFullYear(),d=this.getMonth(),e=this.getDate();b=a?a:weekStartDay;var f=8-new Date(c,0,1).getDay();8==f&&(f=1);var g=(Date.UTC(c,d,e,0,0,0)-Date.UTC(c,0,1,0,0,0))/nDay+1,h=Math.floor((g-f+7)/7);if(h===b){c--;var i=8-new Date(c,0,1).getDay();h=2==i||8==i?53:52}return h},Date.prototype.millisecondsElapsed=function(a){return Math.abs((a||new Date)-this)},Date.prototype.getDayName=function(a){return a&&1==a?util.printd("ddd",this):util.printd("dddd",this)},Date.prototype.getMonthName=function(a){return a&&1==a?util.printd("mmm",this):util.printd("mmmm",this)},"function"==typeof util.scand||(util.scand=function(){if(2==arguments.length)return new Date(Date.parse(arguments[1]))},delete util.printd,util.printd=function(){if(2==arguments.length){var a=arguments[0],b=arguments[1];if("number"==typeof a&&b instanceof Date){var c;switch(a){case 0:c=util.printd("D:yyyymmddHHMMss",b),c+=b.getTimezoneOffset().toString();break;case 1:c=util.printd("yyyy.mm.dd HH:MM:ss",b),c+=b.getTimezoneOffset().toString();break;case 1:c=util.printd("yyyy/mm/dd hh:MM:ss",b)}return c}if("string"==typeof a&&b instanceof Date)return PPDF_parseDateString(a,b)}}),console.println("** PPDF: DateExtended ready");*/
|
|||
objstm_1404_00.bin |
pdf-objstm-decoded | PDF /ObjStm 1404 0 obj (inflated) | 15158 bytes |
SHA-256: 852061f9325a89bf7fb474524ffd746d4c9b8cbaf4b40fc71ca3bd918f2f34e0 |
|||
icc_00_off00011fb5.icc |
pdf-icc-profile | PDF ICC profile at offset 0x11FB5 | 3144 bytes |
SHA-256: 2b3aa1645779a9e634744faf9b01e9102b0c9b88fd6deced7934df86b949af7e |
|||
icc_01_off00015de2.icc |
pdf-icc-profile | PDF ICC profile at offset 0x15DE2 | 408 bytes |
SHA-256: 653b586c4707574ffcd648ba35494daed2c76ceafcf4c07d315ed961b1dc347f |
|||
font_00_cff_off00015f74.bin |
pdf-font-stream | PDF embedded font (cff) at offset 0x15F74 | 3453 bytes |
SHA-256: 22be5866c474f936bcb4c9a71fc4cdfc1a7c69f95d82421a1bf6530a81abb52b |
|||
font_01_sfnt_off000235d2.bin |
pdf-font-stream | PDF embedded font (sfnt) at offset 0x235D2 | 38226 bytes |
SHA-256: 317d345e7171d6aa7ba72c66d454fc557e9f3e216e54ef11a33685d6ed9f8f50 |
|||
font_02_sfnt_off000303bb.bin |
pdf-font-stream | PDF embedded font (sfnt) at offset 0x303BB | 50384 bytes |
SHA-256: ee62ff777c8ad9a505d7c5beebae3a37a3d525b4d53a0f656227e9caafd45bcb |
|||
font_03_sfnt_off0004e1fd.bin |
pdf-font-stream | PDF embedded font (sfnt) at offset 0x4E1FD | 60316 bytes |
SHA-256: d8a4ad4de382119e3b241ff73f9572f246af46d7375c8c9229427fbbc47ef922 |
|||
Open this report in the interactive analyzer, or submit your own file for analysis.