Page 1 of 1

[Implemented] Privacy concerns about OnError

Posted: Fri Oct 16, 2015 5:35 pm
by Jan125
Well, uh...
If you enable OnError line support, it includes the >complete< filepath, unobfuscated, into the file.

Some people, including myself, have rather... STRANGE folder names... and thus, it would be rather unflattering to see them exposed.
You can, of course, remove this via a hex editor or a tool, but this is a cumbersome process.


I hereby propose, that OnError shall start from the source directory:
"X:\Herebedragons\Justinbieberxoxo\newproject\src\main.pb" would become either
"src\main.pb", or just "main.pb".

Re: Privacy concerns about OnError

Posted: Fri Oct 16, 2015 5:52 pm
by kenmo
+1

I agree that OnError file paths should be relative to the project, or main source file.

I even wrote myself a PB tool called RemovePaths which I use before releasing builds. (Detects absolute paths, cuts it down to a relative path, overwrites the original.)

Re: Privacy concerns about OnError

Posted: Fri Oct 16, 2015 6:11 pm
by Jan125
kenmo wrote:I even wrote myself a PB tool called RemovePaths which I use before releasing builds. (Detects absolute paths, cuts it down to a relative path, overwrites the original.)
Exactly that I did as well (minus a real "relative" path, I just use it for orientation, see "src\main.pb" instead of ".\...").

Problem there being (presumably new) people who have Purebasic projects in generic directories, and specifying hard paths for different actions.
Thus, a tool like that would break it.
Then again, these people wouldn't care about privacy that much, either, as most generic directories are protected and/or variable (due to username) in Win Vista+, and XP is a mess anyways.

Not sure how things are on Linux or Mac, tho.

Re: Privacy concerns about OnError

Posted: Fri Oct 16, 2015 7:48 pm
by c4s
+1 - Should be relative to the main source.
kenmo wrote:I even wrote myself a PB tool called RemovePaths which I use before releasing builds. (Detects absolute paths, cuts it down to a relative path, overwrites the original.)
I'm really interested in that. Have you released it in the forum?

Re: Privacy concerns about OnError

Posted: Fri Oct 16, 2015 8:36 pm
by kenmo
c4s wrote:I'm really interested in that. Have you released it in the forum?
No, not released, should be cleaned up first.

But here is a quick-and-dirty / proof-of-concept commandline tool, which finds filepaths in an executable and truncates them to just names.

EDIT: improved code

Code: Select all

;-
; Quick'n'dirty path remover (from executables)
;
; Commandline:
; -i [inputFile] or just [inputFile] (file to parse)
; -o [outputFile] (new file to write, can overwrite inputFile)
; -ov (shorthand to overwrite inputFile)
; -n (no modification, only shows what would be changed)
; -p [path] (specific path to remove from file, otherwise use the executable's folder)
; -w (wait for Enter press at end)

InFile.s  = ""
OutFile.s = ""
Path.s    = ""
WaitKey.i = #False
NoMod.i   = #False

If OpenConsole()

n = CountProgramParameters()
For i = 0 To n - 1
  Command.s = LCase(LTrim(LTrim(ProgramParameter(i), "/"), "-"))
  Select (Command)
    Case "i", "in", "input"
      If (i < n - 1)
        i + 1
        InFile = ProgramParameter(i)
      EndIf
    Case "o", "out", "output"
      If (i < n - 1)
        i + 1
        OutFile = ProgramParameter(i)
      EndIf
    Case "ov", "overwrite", "replace"
      Overwrite = #True
    Case "w", "wait", "waitkey"
      WaitKey = #True
    Case "n", "no"
      NoMod = #True
    Case "p", "path", "pre", "prefix", "strip"
      If (i < n - 1)
        i + 1
        OutFile = ProgramParameter(i)
      EndIf
    Default
      If (FileSize(ProgramParameter(i)) >= 0)
        InFile = ProgramParameter(i)
      Else
        ;
      EndIf
  EndSelect
Next i

If (InFile)

  ; Make Absolute Path
  CompilerIf (#PB_Compiler_OS = #PB_OS_Windows)
    If (Not (FindString(InFile, ":\") Or FindString(InFile, ":/")))
      InFile = GetCurrentDirectory() + InFile
    EndIf
  CompilerElse
    If Left(InFile, 1) <> "/"
      InFile = GetCurrentDirectory() + InFile
    EndIf
  CompilerEndIf
  
  ; Guess Path to remove
  If (Path = "")
    Path = GetPathPart(InFile)
  EndIf
  
  ; Locate executable within MacOS app
  If (Right(InFile, 4) = ".app")
    InFile + "/Contents/MacOS/" + GetFilePart(InFile, #PB_FileSystem_NoExtension)
  EndIf
  
  ; Guess output file
  If (Overwrite)
    OutFile = InFile
  EndIf
  If (OutFile = "")
    If (GetExtensionPart(InFile))
      OutFile = GetPathPart(InFile) + GetFilePart(InFile, #PB_FileSystem_NoExtension) + ".mod." + GetExtensionPart(InFile)
    Else
      OutFile = InFile + "_mod"
    EndIf
  EndIf
  
  PrintN("Path Remover v0.1")
  PrintN("")
  PrintN("Input:  " + InFile)
  PrintN("Output: " + OutFile)
  PrintN("Remove: " + Path)
  PrintN("")
  
  If (ReadFile(0, InFile))
    FSize.i = Lof(0)
    If (FSize > 0)
      *FBuffer = AllocateMemory(FSize)
      If (*FBuffer)
        RSize.i = ReadData(0, *FBuffer, FSize)
      EndIf
    EndIf
    CloseFile(0)
    If ((FSize > 0) And (RSize = FSize))
      PSize.i = StringByteLength(Path, #PB_Ascii)
      *PBuffer = AllocateMemory(PSize)
      If (*PBuffer)
        PokeS(*PBuffer, Path, -1, #PB_Ascii | #PB_String_NoZero)
        For i = 0 To FSize - PSize
          If (CompareMemory(*FBuffer + i, *PBuffer, PSize))
            Term.s = PeekS(*FBuffer + i, -1, #PB_Ascii)
            TSize.i = StringByteLength(Term, #PB_Ascii)
            PrintN("@ 0x" + Hex(i) + " - " + Term)
            If (Not NoMod)
              PokeS(*FBuffer + i, Mid(Term, 1 + Len(Path)), -1, #PB_Ascii)
              If (TSize > PSize)
                FillMemory(*FBuffer + i + (TSize-PSize) + 1, PSize - 1 , #NUL, #PB_Byte)
              EndIf
            EndIf
            Term.s = Mid(Term, 1 + Len(Path));PeekS(*FBuffer + i, -1, #PB_Ascii)
            PrintN(Space(5 + Len(Hex(i))) + "> " + Term)
            Changes.i + 1
            i + TSize
          EndIf
        Next i
        PrintN("")
        PrintN("Paths matched: " + Str(Changes))
      EndIf
    EndIf
    If (*FBuffer)
      If (CreateFile(1, OutFile))
        WriteData(1, *FBuffer, FSize)
        CloseFile(1)
      EndIf
      FreeMemory(*FBuffer)
    EndIf
  EndIf
EndIf

If (WaitKey)
  Input()
EndIf
CloseConsole()
EndIf

;-

Re: Privacy concerns about OnError

Posted: Fri Oct 16, 2015 10:40 pm
by c4s
@kenmo
Thanks. I'll check it out tomorrow.

Re: Privacy concerns about OnError

Posted: Mon Dec 05, 2016 5:21 pm
by Lunasole
I also made a small tool for that today ^^
See included readme and sources. It's for windows, but probably can be modified for linux easily.

PS. Updated to v 1.0.0.6
PSS. Updated once more to v 1.0.0.7. Important bug fixed

Code: Select all

Restore L:Read$ P$:Read.q Fs:Read.q Cs
*C=AllocateMemory(Cs):*F=AllocateMemory(Fs)
CopyMemory(?L+(1+Len(P$))*SizeOf(Character)+SizeOf(Quad)*2,*C,Cs)
PP$=GetExtensionPart(P$):PP$+" | *."+PP$:P$=SaveFileRequester("Lunar Ship v1.0.0.1",P$,PP$,0)
If P$ And UseLZMAPacker() And (UncompressMemory(*C,Cs,*F,Fs,2)=Fs) And CreateFile(42,P$)
	WriteData(42,*F,Fs)
EndIf

DataSection
	L: : Data.s "NoStOnYourPath 1.0.0.7.zip" ; 2016/12/07 15:52:51
	Data.q $7FF,$79A,$122800010000005D,$503A5DD5972860BC,$B2F8D5C818590735,$9772FF83899481FC,$E8429D7A18552CF0,$577FC91F542160EC,$2CF63CF465B98F8,$4FD4042A17E03453,$8A750955880ADC8D,$922CF789BE0E5DBA,$2567D62F96347376,$D0EDCB1032F793E,$A5C63774EC85DFB0,$4567DFDE647EE34E,$AA5CC8A38202EF66,$A3A265D1D223F8E7,$6F262236F1FD77D6,$A0D6D7DFCD8EFB02,$C678412AC42FDAA4,$DB5B884A064B0B15,$868139AD093DD3BA,$DBA6DD503C3A98C8,$455B619B7C43DB3D,$CDA448CFE26CA414,$A0BBE67BC4FF1DF1,$725522A1D95F0993,$1863FC760AACEC58,$57ABFD3223A40D6C,$91EBEFF696A6C859,$CC37DB94B4999A6A,$2A606B9F967BAF63,$49A0A3305A67FEFC,$5991124F9EC4DB79,$385F9766BB7F079F,$A9CF5017BA7E1020,$E4AEF88C04477659,$A662ED3F05D9C9CD,$20DFAF4C0C706D5,$AE23075D3F0A0EF8,$6CD71BB6710E64F6,$B79D32BC7E40D353,$CC2CE3A8A043E58B,$EA13969AA1433EAD,$C6F38459CA8E4531,$2B6F17A1C223E483,$7C3F420832952F36,$BC2CB81CF774A7C1,$2AD330BA64CF86B0,$3BBFDDDDA2B398EE,$7CCB2F91A7372BE3,$613ED0C08E51E261,$893C077E7F2DD878,$77F62D982A1DADB4,$E76E5636EDD5D97F,$1478B277884B8144,$9C552A04276558B,$FE7D4CCE817F59E5,$F857AE68B6C883D4,$E8F4857262809FD8,$B7D94B01AB0FB50F,$BE5DD1DE5C2324BD,$55D692E0F96ABA93,$E55DA08853FE0B4C,$B54719A0D58ECC40,$2047993275A377EB,$14F334ADC5AD6E3C,$D5A9281830C593C0,$79568A1530AEE2E5,$E9D893A4850B4F12,$2B61D605AC11A7,$1093ABC178DFA7E9,$AE6FCA585FAA1B5C,$C98CC6C20D606CB0,$19ECDB394B3FE40E,$2806D8DA6BE3561E,$6CF5F13369DDEE08,$14DBAD8BF1A3704F,$5F075D9EA6AA016F,$372FFB9FF3932AAE,$6E951C3B82D8DCB0,$1A0EE38320C8F449,$95F03E896D9B0F33,$46974FB1F74D6597,$8B89B92BD1DEA452,$AB84F11E90D6F11D,$96D4B0654553C697,$AAA1687D422793B8,$43DF829020600EB5,$D40C4DF051193EFE,$16C0F6D68788526,$51E37452AF75FE5F,$C400C8274A793297,$3B1610BDA3378771,$5999557C05FFDCF2,$E1F563169565B694,$752301B4FA4163F9,$D6945FC563FE746E,$202EC3D900F8AB20,$FFB7BFDE0EFFC9EC,$FE5DED68271CBE11,$109F5CA67BA339CF,$3047FB1D6C15C336,$945439671652FFDB,$492109640ED5D554,$F0D7AD100A335E5E,$745589B84289A994,$EEBDCCBB16F8F551,$90D27520BAFAB52B,$E769CED53C2F5B62,$7FF56F818931132B,$3C033876E7616EE7,$2DD018B47D6CB247,$CA220B7EC2A910BC,$E01098AAC3A5C750,$AED63DCA0E516E3C,$889AD16E2DB9FB43,$F2D6697DF7E66136,$F49EF3021C3F095C,$76BD8D50662835B4,$A25549A19C125D9F,$8393965F37AAF6D3,$C50E580C28485685,$4E2C50587010E614,$B4CA64FCDB05D0A,$F90229E88486C068,$C75124E0E4E0E049,$DBAE92AE02A3D88,$7527BE937F81C8D3,$EE93259CF7BAFF7E,$53700BEABDBB4592,$B5C9B9C40EFE80C6,$36FE3D89772FB8E3,$CA5E3254942D3755,$514C940B86F4646E,$98B60DC9BAA56309,$BA450B48F1F19638,$8821D9BF2348254B,$8C057461DD3D903D,$8F9843A1528A8C3A,$54E9879B414F3901,$5C4500838FDE9376,$64A8AADF8803DD9D,$F99694EC46EFF1AD,$A55520A68C36A2B1,$9908B06F02AC8F29,$DD8DD50480EA1CFF,$3D67F0A11F3D8B0A,$A9EAA8101F5AE9D6,$D2FF78AF349D14AB,$EE62C1AD468A5B8C,$6FF1BD2AA9946F22,$A58F6C48D9CC919D,$2887A727F74D77D1,$63A0099E6DD48841,$36EA549605B67F13,$504E27D1D1572821,$DFB918108FC7A420,$EDCD270251BCFF99,$128DDC799E7EF631,$3083884041CA3344,$208D9A005C181AF1,$5DCF0EDB3200E109,$77376FAF4A87ABA3,$546FE2A641D182AF,$AD42D403233A8C9F,$3F3FF98CDEA5E2F9,$7A35253CC84E1A84,$6D9A6139D64F8353,$51391041CB99C7BB,$576E390F3C824480,$233D6329A9DE5C24,$83297F1DE89CB202,$2D0B651BC0C345D7,$C741485C4C181642,$E007783675C16CC5,$53FD9B37D877F469,$585AA70E9DBCB536,$A49A6C3F91A0DB7F,$DD557DD2D364D622,$A7A8190E85A87E17,$EE2C869DE420F90,$A15AED903C3B920D,$3E37EA85CE9D09C9,$7C8FF3595CED54,$FA4B768106153450,$DF4CCEAE58EF62F7,$5174C998B7DC64A,$3752A9B7FD1222B2,$F2C60673FF7A4A56,$65C733E48FE07B02,$E80E5BEEF8710D5C,$9F1D65D18829CF25,$9D5594B6C4E89992,$9E779AF7FC162029,$CA515319147B0D4F,$E94B52458EAC8278,$63D1C364EC2BBA25,$17E0FA064B5A12E4,$A54C675B854416B,$E810BCABAF1EE6DC,$CCDB932CC1BF5A2E,$48B3A73BEEC53FC3,$2968752A559E4FF6,$6818D234A1CA9D97,$F6B3D0A644D05E43,$99C885303E726B65,$5D07AF426FC308FD,$3920463CC5B8BCBD,$9307CE413ABBFD00,$83F368F293D66830,$9F4B30064F6FCD63,$E8EA2D747E91B85F,$46FF20BB0349353D,$37D5605B08E59BAB,$54B3E436F45476A9,$ABC9F104C6490565,$3C748C212F9CBC46,$A0A38D2A7E903EE0,$60879C9D3E0EF335,$121CAF7AC7694989,$B14127A8F8BB94B7,$9EAD86F5F294F35B,$1EAB02CACD0D855D,$879332C42DF00709,$EDB1CEBFE2302010,$75112CF1EDD9E630,$15C4A50EBF0E3D33,$CBEA32BC01DBAEF1,$CCF8A0E65C150A68,$C59795D2D26C77C5,$A75CB8EEA3002A98,$3432CA3DD62EFD52,$EEC116DB31CA3B86,$A9EF6B7F32524D25,$4F19AB0357CDFD69,$5D272A831FEBC4D0,$5EEE201702C1761,$DD404958CA0FA55E,$4F7A2F94E71D0FF,$4015116F61E3E983,$92C385BD00F4E914,$A4505EA1701DB83E,$8DA64DED17473EB3,$2008,$2008
EndDataSection