diff --git a/lib/core.js b/lib/core.js
index <HASH>..<HASH> 100644
--- a/lib/core.js
+++ b/lib/core.js
@@ -12,6 +12,8 @@ var util = require('./util');
 var inherits = require('util').inherits;
 var Transform = require('readable-stream').Transform;
 
+var win32 = process.platform === 'win32';
+
 var Archiver = module.exports = function(format, options) {
   if (!(this instanceof Archiver)) {
     return new Archiver(format, options);
@@ -196,11 +198,16 @@ Archiver.prototype._normalizeEntryData = function(data, stats) {
     }
   }
 
-  // 511 === 0777; 493 === 0755; 420 === 0644
+  // 511 === 0777; 493 === 0755; 438 === 0666; 420 === 0644
   if (typeof data.mode === 'number') {
     data.mode &= 511;
   } else if (data.stats && data.mode === null) {
     data.mode = data.stats.mode & 511;
+
+    // stat isn't reliable on windows; force 0755 for dir
+    if (win32 && isDir) {
+      data.mode = 493;
+    }
   } else if (data.mode === null) {
     data.mode = isDir ? 493 : 420;
   }
stat isn't reliable on windows; force <I> for directories when sourced from stats. closes #<I> #<I>. props @Tim-B.