মানব-পঠনযোগ্য ফাইলগুলি সন্ধান করুন


14

আমি ওভারডায়ার ডাকাত চ্যালেঞ্জের স্তরের 5 স্তর করার একটি কার্যকর উপায় সন্ধান করার চেষ্টা করছি ।

যাইহোক, আমার কাছে অনেকগুলি ফাইল রয়েছে, এবং কেবলমাত্র একটিই নিম্নোক্ত মানদণ্ডকে সম্মান করে:

  • মানব পাঠযোগ্য
  • আকারে 1033 বাইট
  • অ এক্সিকিউটেবল

এখনই, আমি findকমান্ডটি ব্যবহার করছি , এবং আমি 2 টি সর্বশেষ মানদণ্ডের সাথে মিল রেখে ফাইলগুলি সন্ধান করতে সক্ষম হয়েছি:

find . -size 1033c ! -executable

যাইহোক, অ-মানব-পঠনযোগ্য ফাইলগুলি কীভাবে বর্ধিত করা যায় তা আমি জানি না। আমি যে চ্যালেঞ্জটির সমাধান পেয়েছি সেগুলি -readableপরীক্ষার প্যারামিটার ব্যবহার করে , তবে আমি মনে করি না এটি কাজ করে। -readableচ্যালেঞ্জের বিবরণীতে ASCII ফাইল বা এর মতো কিছু জিজ্ঞাসা করার সময় কেবল ফাইলগুলির অনুমতিগুলি দেখে থাকে এবং এর সামগ্রীতে নয়।


1
আপনি কীভাবে মানব পাঠযোগ্যকে সংজ্ঞায়িত করবেন? বাইনারি না?
টেরডন

2
ফাইল কমান্ডটি আপনার বন্ধু :)
রোমিও নিনভ

: হয়তো এর প্রতিলিপি stackoverflow.com/questions/14505218/...
zuazo

3
মানুষ পৃথিবীর অন্যতম বুদ্ধিমান প্রজাতি। তারা কম্পিউটারের সাথে পারদর্শী একমাত্র ব্যক্তি। এনক্রিপ্ট করা ফাইলগুলির জন্য এনক্রিপশন কীগুলি টাইপটি খুঁজে পেতে এবং ধরে রাখতে পারলে তারা বেশিরভাগ ফাইল পড়তে পারে।
স্টাফেন চেজেলাস

1
ভক্ষক সতর্কতা!!
ড্যান বলসার

উত্তর:


17

হ্যাঁ, আপনি findসঠিক আকারের অ-এক্সিকিউটেবল ফাইলগুলি অনুসন্ধান করতে এবং তারপরে fileASCII পরীক্ষা করার জন্য ব্যবহার করতে পারেন । কিছুটা এইরকম:

find . -type f -size 1033c ! -executable -exec file {} + | grep ASCII

প্রশ্নটি যতটা সহজ মনে হচ্ছে তত সহজ নয় isn't 'মানব পাঠযোগ্য' একটি মারাত্মক অস্পষ্ট শব্দ। সম্ভবত, আপনি অর্থ পাঠ্য। ঠিক আছে, তবে কি ধরণের পাঠ্য? লাতিন চরিত্রটি কেবল এএসসিআইআই? পূর্ণ ইউনিকোড? উদাহরণস্বরূপ, এই তিনটি ফাইল বিবেচনা করুন:

$ cat file1
abcde
$ cat file2
αβγδε
$ cat file3
abcde
αβγδε
$ cat file4
#!/bin/sh
echo foo

এগুলি সমস্ত পাঠ্য এবং মানব পাঠযোগ্য। এখন, আসুন দেখুন fileসেগুলি কী করে:

$ file *
file1: ASCII text
file2: UTF-8 Unicode text
file3: UTF-8 Unicode text
file4: POSIX shell script, ASCII text executable

সুতরাং, findউপরের কমান্ডটি কেবল এটি খুঁজে পাবে file1(এই উদাহরণের জন্য, কল্পনা করুন যে এই ফাইলগুলির মধ্যে 1033 অক্ষর ছিল)। আপনি findস্ট্রিংটি সন্ধান করতে প্রসারিত করতে পারেন text:

find . -type f -size 1033c ! -executable -exec file {} + | grep -w text

এর সাথে -w, grepকেবলমাত্র textএমন লাইনগুলি মুদ্রণ করবে যেখানে স্ট্যান্ড-একা শব্দ হিসাবে পাওয়া যায়। এটি আপনি যা চান তার খুব কাছাকাছি হওয়া উচিত , তবে আমি গ্যারান্টি দিতে পারি না যে অন্য কোনও ফাইল টাইপ নেই যার বর্ণনাতে স্ট্রিংও অন্তর্ভুক্ত থাকতে পারে text


4

যদিও -execবেশিরভাগ ফাইলগুলির সাথে এমন কিছু বিষয় যা কোথায় পাওয়া, এটি একটি পরীক্ষা হিসেবে কাজ করতে পারে না করতে ব্যবহৃত হয়। অতএব, আমরা এটি আপনার অন্যান্য মানদণ্ডে যুক্ত করতে পারি:

find . \
  -size 1033c \
  -not -executable \
  -exec sh -c 'file {} | grep "text$"' \;

মনে রাখবেন, grepপ্যাটার্নটি পাওয়া না গেলে শূন্য-শূন্যটি ফিরে আসে এবং sh -c "COMMAND"মূল্যায়নের ফলাফল (যতক্ষণ না এটি বৈধ হয়) ফিরিয়ে দেবে। সুতরাং এটি কেবল file <filename>এমন ফাইলগুলি মুদ্রণ করবে যেখানে কিছু শেষ হয়ে যায় text, যেমন "ইউটিএফ -8 ইউনিকোড পাঠ্য" বা "এএসসিআইআই পাঠ্য", তবে "নন-আইএসও প্রসারিত-এএসসিআইআই পাঠ্য নয়, এস্কেপ সিকোয়েন্স সহ"।

একক লাইনে এটি শেষ হওয়ার চেয়েও ছোট হয়ে যায় xargs:

find . -size 1033c -not -executable -exec sh -c 'file {} | grep "text$"' \;

মনে রাখবেন যে আপনি যে sh -c 'file {} | grep "text$"'কোনও কাস্টম কমান্ড দিয়ে প্রতিস্থাপন করতে পারেন । আপনি যদি খুব জটিল কিছু পরীক্ষা করতে চান তবে শেল স্ক্রিপ্ট সরবরাহ করা এবং পরিবর্তে এটি ব্যবহার করা ভাল ধারণা হতে পারে:

find . -size 1033c -not -executable -exec is_human_readable.sh {} \;

যা দীর্ঘমেয়াদে আপনার শেলের ইতিহাসের চেয়ে বজায় রাখা আরও সহজ:

#!/bin/sh
file "$@" | grep "text$" > /dev/null

নিস! দ্রষ্টব্য, তবে, এই text$মিলটি শেল স্ক্রিপ্ট হিসাবে স্বীকৃত জিনিসগুলি বাদ দেবে। শেবাংয়ের যে কোনও কিছুই স্ক্রিপ্ট হিসাবে চিহ্নিত করা হয় এবং এগুলি পুরোপুরি মানব পাঠযোগ্য।
টেরডন

@ ইটারডন সত্য, তবে স্ক্রিপ্টগুলি কার্যকর হতে পারে: ডি। বলা হচ্ছে, একটি সঠিক স্ক্রিপ্টের পিডিএফও স্বীকৃতি দেওয়া উচিত। তবে অন্যদিকে, কোনও পিডিএফ কি কোনও চিত্র যা মানুষের পাঠযোগ্য ? কিছু পাঠ্যের একটি পিএনজি পাঠযোগ্য ? সম্ভবত। আমার ধারণা সম্পূর্ণ পরীক্ষাটি হবে ... চ্যালেঞ্জিং।
জিটা


1

আপনি কেবল ব্যবহার করতে হবে:

find inhere -size 1033c

এটি আপনাকে একমাত্র ফাইল দেবে যা পাসওয়ার্ড ধারণ করে।


কেন + 1033c আরও ফাইল ফেরত দেয়? এটি কি বৃহত্তর বা সমান চিহ্নের মতো?
szeitlin

1

ডিরেক্টরি সামগ্রীর বিপরীতে কেবল নিম্নলিখিতটি চালান:

$ file -- *
-file00: data
-file01: data
-file02: data
-file03: data
-file04: data
-file05: data
-file06: data
-file07: ASCII text
-file08: data
-file09: data
$ cat -- \-file07
<output>

0
find . -size 1033c ! -executable|xargs file|grep "ASCII text" |awk -F: '{print $1}'

দয়া করে এই সম্মিলিত আদেশগুলি চেষ্টা করুন। এটা আমার স্টেশনে কাজ করে


0

আপনি এটি চেষ্টা করতে পারেন

find . -size 1033c ! -executable -exec file {} +

আপনার চ্যালেঞ্জ অনুমতি দেয় না grep। পাসওয়ার্ড ফাইলটি "খুব দীর্ঘ রেখার সাথে ASCII পাঠ্য" হিসাবে রিপোর্ট করা হবে


0

মানব-পঠনযোগ্য ফাইলের নামগুলি ফিল্টার করার জন্য, আপনি [:print:]( মুদ্রণযোগ্য ) অক্ষর শ্রেণীর নামটি ব্যবহার করতে পারেন । ম্যানুয়ালটিতে আপনি এই জাতীয় ক্লাস সম্পর্কে আরও জানতে পারবেন grep

find . -type f -size 1033c -name "[[:print:]]*" ! -executable

দ্বিতীয় ভাবাতে, "মানব-পঠনযোগ্য" প্রয়োজনীয়তা ফাইলের সামগ্রীর নাম পরিবর্তে উল্লেখ করতে পারে। অন্য কথায়, আপনি পাঠ্য ফাইলগুলি অনুসন্ধান করবেন । সেটা আরও কিছুটা কৌতুকপূর্ণ। @ ডি_বাই যেমন একটি মন্তব্যে পরামর্শ দিয়েছেন, তারপরে fileআপনার ফাইলের বিষয়বস্তুর ধরণ নির্ধারণ করতে কমান্ডটি ব্যবহার করা উচিত । তবে fileপাইপের পরে চালানো ভাল ধারণা হবে না কারণ এটি ফাইলটির নাম প্রদর্শনের কাজটিকে জটিল করে তুলবে। আমি যা পরামর্শ দিচ্ছি তা এখানে:

find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print

fileপার্টটি কীভাবে কাজ করে তা সংক্ষেপে এটি :

  • -execসম্পৃক্ত, executes sh -c 'file -b $0 | grep -q text' FILENAMEপ্রত্যেকের জন্য FILENAMEমাফিক সব আগের শর্ত (ধরন, আকার, অ এক্সিকিউটেবল)।
  • এই ফাইলগুলির প্রত্যেকটির জন্য, একটি শেল ( sh) এই ছোট স্ক্রিপ্টটি চালায় : ফাইলের নামের সাথে file -b $0 | grep -q textপ্রতিস্থাপন $0করে।
  • fileপ্রোগ্রাম প্রতিটি ফাইলের বিষয়বস্তুর প্রকার নির্ধারণ করে এই তথ্য আউটপুট। -bবিকল্প প্রতিরোধ প্রতিটি পরীক্ষিত ফাইলের নাম মুদ্রণ।
  • grepfileপ্রোগ্রাম থেকে আসা আউটপুট ফিল্টার করে "পাঠ্য" সম্বলিত লাইন অনুসন্ধান করে । (আপনার নিজের জন্য দেখুন, fileকমান্ডের একটি সাধারণ আউটপুট কেমন লাগে))
  • তবে grepপরিশোধিত পাঠ্য আউটপুট দেয় না, কারণ এতে -q(শান্ত) বিকল্পটি দেওয়া আছে। এটি যা করে, কেবলমাত্র তার প্রস্থান স্থিতিটি পরিবর্তন করতে হয় 0(যা "সত্য" প্রতিনিধিত্ব করে - ফিল্টারযুক্ত পাঠ্যটি পাওয়া গেছে) বা 1 (যার অর্থ "ত্রুটি" - "পাঠ্য" পাঠ্যটি আউটপুটে প্রদর্শিত হয়নি file)।
  • আসল / মিথ্যা প্রস্থান স্থিতিটি grepআরও পাশ করা shহয় findএবং পুরো -exec sh -c 'file $0 | grep -q text' {} \;পরীক্ষার চূড়ান্ত ফলাফল হিসাবে কাজ করে ।
  • যদি উপরে পরীক্ষা ফিরে সত্য , -printকমান্ড এক্সিকিউট করা হয় (যেমন পরীক্ষিত ফাইলের নাম ছাপা হয়)।

0
bandit4@bandit:~$ ls
inhere

bandit4@bandit:~$ file inhere/*


inhere/-file00: data
inhere/-file01: data
inhere/-file02: data
inhere/-file03: data
inhere/-file04: data
inhere/-file05: data
inhere/-file06: data
inhere/-file07: ASCII text
inhere/-file08: data
inhere/-file09: data

bandit4@bandit:~$ pwd 

/home/bandit4

bandit4@bandit:~$ cat /home/bandit4/inhere/-file07

koReBOKuIDDepwhWk7jZC0RTdopnAYKh
bandit4@bandit:~$ 

কেবল ইনহির / * এবং বিড়াল / বাড়ি / ব্যান্ডিট 4 / ইনহেইর / -ফাইলে 077 ফাইল ব্যবহার করুন

0
find  -type f ! -executable -size 1033c

অনুশীলন থেকে আপনি ফাইল পাবেন



0

আমি মনে করি ফাইন্ড এবং গ্রেপ ব্যবহার করে উপরের দ্বারা উল্লিখিত এই ডাকাত স্তরের পাসওয়ার্ড সন্ধানের দীর্ঘতর উপায় হ'ল সর্বাধিক বর্ণনামূলক কমান্ড।

find . -type f -size 1033c ! -executable -exec file {} + | grep ASCII

তবে, 'ফাইল' কমান্ডটি আরও ব্যবহার করার পরে আমি বুঝতে পেরেছি যে মানব-পাঠযোগ্য ফাইলগুলি (এই স্তরে এএসসিআইআই) এইভাবে একটি সম্পূর্ণ ডিরেক্টরি ফাইল টাইপ পরীক্ষা করে সনাক্ত করা যায়। অন্তর্নিহিত ডিরেক্টরিটি '-filexx' নামের ফাইল ধারণ করে বা দ্রুত পুরো ইনহাইরেক্ট ডিরেক্টরিটি পরীক্ষা করে এটি দিয়েfile ./*

এখানে আমার পদ্ধতির ছিল।

bandit4@bandit:~/inhere$ file ./*
./-file00: data
./-file01: data
./-file02: data
./-file03: data
./-file04: data
./-file05: data
./-file06: data
./-file07: ASCII text
./-file08: data
./-file09: data

bandit4@bandit:~/inhere$ cat ./-file07
koReBOKuIDDepwhWk7jZC0RTdopnAYKh

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.